expert-mentor 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- expert_mentor-0.6.0/LICENSE +21 -0
- expert_mentor-0.6.0/PKG-INFO +69 -0
- expert_mentor-0.6.0/pyproject.toml +98 -0
- expert_mentor-0.6.0/references/fields.md +64 -0
- expert_mentor-0.6.0/references/pedagogy.md +90 -0
- expert_mentor-0.6.0/references/providers.md +132 -0
- expert_mentor-0.6.0/scripts/expert_mentor.egg-info/PKG-INFO +69 -0
- expert_mentor-0.6.0/scripts/expert_mentor.egg-info/SOURCES.txt +19 -0
- expert_mentor-0.6.0/scripts/expert_mentor.egg-info/dependency_links.txt +1 -0
- expert_mentor-0.6.0/scripts/expert_mentor.egg-info/entry_points.txt +3 -0
- expert_mentor-0.6.0/scripts/expert_mentor.egg-info/top_level.txt +4 -0
- expert_mentor-0.6.0/scripts/expert_mentor.py +1761 -0
- expert_mentor-0.6.0/scripts/mentor_cards.py +188 -0
- expert_mentor-0.6.0/scripts/mentor_memory.py +271 -0
- expert_mentor-0.6.0/scripts/mentor_runtime.py +440 -0
- expert_mentor-0.6.0/setup.cfg +4 -0
- expert_mentor-0.6.0/templates/cards_prompt.md +33 -0
- expert_mentor-0.6.0/templates/compact_prompt.md +34 -0
- expert_mentor-0.6.0/templates/curriculum_prompt.md +63 -0
- expert_mentor-0.6.0/templates/mentor_system_prompt.md +132 -0
- expert_mentor-0.6.0/templates/review_prompt.md +40 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 expert-mentor contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: expert-mentor
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Summary: Turn any LLM (Claude, ChatGPT, Gemini, Ollama, llama.cpp) into a professional teacher for any field.
|
|
5
|
+
Author: expert-mentor contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/voidstackloop/expert-mentor
|
|
8
|
+
Project-URL: Repository, https://github.com/voidstackloop/expert-mentor
|
|
9
|
+
Project-URL: Issues, https://github.com/voidstackloop/expert-mentor/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/voidstackloop/expert-mentor/releases
|
|
11
|
+
Project-URL: PyPI, https://pypi.org/project/expert-mentor/
|
|
12
|
+
Keywords: llm,mentor,tutor,education,claude,chatgpt,ollama,prompt
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Education
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Topic :: Education
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# expert-mentor
|
|
33
|
+
|
|
34
|
+
Turn any capable LLM — Claude, ChatGPT, Gemini, or a local Ollama / llama.cpp
|
|
35
|
+
model — into a **professional teacher for any field**.
|
|
36
|
+
|
|
37
|
+
`expert-mentor` generates a calibrated expert-mentor system prompt for a given
|
|
38
|
+
field and level, runs the tutoring session directly, remembers what the learner
|
|
39
|
+
has mastered across sessions, and assesses progress from the transcript.
|
|
40
|
+
|
|
41
|
+
## Highlights
|
|
42
|
+
|
|
43
|
+
- **Provider-native prompts** — XML-shaped, prompt-cached system blocks for
|
|
44
|
+
Claude; `developer` role, `max_completion_tokens`, and `reasoning_effort` for
|
|
45
|
+
ChatGPT reasoning models.
|
|
46
|
+
- **Live sessions** over Anthropic, OpenAI, Ollama, and llama.cpp (standard
|
|
47
|
+
library only, no `pip install` needed to run).
|
|
48
|
+
- **Persistent learner memory** — mastered / shaky / misconceptions / open
|
|
49
|
+
questions, injected into every future session.
|
|
50
|
+
- **Model-assisted review** — turn a session transcript into an updated profile.
|
|
51
|
+
- **Curriculum design**, saved mentors, live model discovery, and a config file.
|
|
52
|
+
- **Zero runtime dependencies**; Python 3.8+.
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pipx install expert-mentor # or: pip install expert-mentor
|
|
58
|
+
mentor --field "quantum computing" --level beginner
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Quick start
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mentor run --field "Rust" --provider claude --remember
|
|
65
|
+
mentor curriculum --field "Rust" --duration "6 weeks"
|
|
66
|
+
mentor fields
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
MIT licensed.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "expert-mentor"
|
|
7
|
+
description = "Turn any LLM (Claude, ChatGPT, Gemini, Ollama, llama.cpp) into a professional teacher for any field."
|
|
8
|
+
readme = { content-type = "text/markdown", text = """
|
|
9
|
+
# expert-mentor
|
|
10
|
+
|
|
11
|
+
Turn any capable LLM — Claude, ChatGPT, Gemini, or a local Ollama / llama.cpp
|
|
12
|
+
model — into a **professional teacher for any field**.
|
|
13
|
+
|
|
14
|
+
`expert-mentor` generates a calibrated expert-mentor system prompt for a given
|
|
15
|
+
field and level, runs the tutoring session directly, remembers what the learner
|
|
16
|
+
has mastered across sessions, and assesses progress from the transcript.
|
|
17
|
+
|
|
18
|
+
## Highlights
|
|
19
|
+
|
|
20
|
+
- **Provider-native prompts** — XML-shaped, prompt-cached system blocks for
|
|
21
|
+
Claude; `developer` role, `max_completion_tokens`, and `reasoning_effort` for
|
|
22
|
+
ChatGPT reasoning models.
|
|
23
|
+
- **Live sessions** over Anthropic, OpenAI, Ollama, and llama.cpp (standard
|
|
24
|
+
library only, no `pip install` needed to run).
|
|
25
|
+
- **Persistent learner memory** — mastered / shaky / misconceptions / open
|
|
26
|
+
questions, injected into every future session.
|
|
27
|
+
- **Model-assisted review** — turn a session transcript into an updated profile.
|
|
28
|
+
- **Curriculum design**, saved mentors, live model discovery, and a config file.
|
|
29
|
+
- **Zero runtime dependencies**; Python 3.8+.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pipx install expert-mentor # or: pip install expert-mentor
|
|
35
|
+
mentor --field "quantum computing" --level beginner
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quick start
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
mentor run --field "Rust" --provider claude --remember
|
|
42
|
+
mentor curriculum --field "Rust" --duration "6 weeks"
|
|
43
|
+
mentor fields
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
MIT licensed.
|
|
47
|
+
""" }
|
|
48
|
+
requires-python = ">=3.8"
|
|
49
|
+
license = { text = "MIT" }
|
|
50
|
+
authors = [{ name = "expert-mentor contributors" }]
|
|
51
|
+
keywords = ["llm", "mentor", "tutor", "education", "claude", "chatgpt", "ollama", "prompt"]
|
|
52
|
+
classifiers = [
|
|
53
|
+
"Development Status :: 4 - Beta",
|
|
54
|
+
"Environment :: Console",
|
|
55
|
+
"Intended Audience :: Education",
|
|
56
|
+
"Intended Audience :: Developers",
|
|
57
|
+
"License :: OSI Approved :: MIT License",
|
|
58
|
+
"Operating System :: OS Independent",
|
|
59
|
+
"Programming Language :: Python :: 3",
|
|
60
|
+
"Programming Language :: Python :: 3.8",
|
|
61
|
+
"Programming Language :: Python :: 3.9",
|
|
62
|
+
"Programming Language :: Python :: 3.10",
|
|
63
|
+
"Programming Language :: Python :: 3.11",
|
|
64
|
+
"Programming Language :: Python :: 3.12",
|
|
65
|
+
"Topic :: Education",
|
|
66
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
67
|
+
]
|
|
68
|
+
dynamic = ["version"]
|
|
69
|
+
|
|
70
|
+
[project.urls]
|
|
71
|
+
Homepage = "https://github.com/voidstackloop/expert-mentor"
|
|
72
|
+
Repository = "https://github.com/voidstackloop/expert-mentor"
|
|
73
|
+
Issues = "https://github.com/voidstackloop/expert-mentor/issues"
|
|
74
|
+
Changelog = "https://github.com/voidstackloop/expert-mentor/releases"
|
|
75
|
+
"PyPI" = "https://pypi.org/project/expert-mentor/"
|
|
76
|
+
|
|
77
|
+
[project.scripts]
|
|
78
|
+
mentor = "expert_mentor:cli"
|
|
79
|
+
expert-mentor = "expert_mentor:cli"
|
|
80
|
+
|
|
81
|
+
[tool.setuptools]
|
|
82
|
+
package-dir = { "" = "scripts" }
|
|
83
|
+
py-modules = ["expert_mentor", "mentor_runtime", "mentor_memory", "mentor_cards"]
|
|
84
|
+
|
|
85
|
+
[tool.setuptools.dynamic]
|
|
86
|
+
version = { attr = "expert_mentor.__version__" }
|
|
87
|
+
|
|
88
|
+
[tool.setuptools.data-files]
|
|
89
|
+
"share/expert-mentor/templates" = ["templates/*.md"]
|
|
90
|
+
"share/expert-mentor/references" = ["references/*.md", "references/*.json"]
|
|
91
|
+
|
|
92
|
+
[tool.ruff]
|
|
93
|
+
line-length = 120
|
|
94
|
+
target-version = "py38"
|
|
95
|
+
|
|
96
|
+
[tool.ruff.lint]
|
|
97
|
+
select = ["E", "F", "W", "I", "UP", "B"]
|
|
98
|
+
ignore = ["E501"]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Field profiles
|
|
2
|
+
|
|
3
|
+
A **field profile** tells the mentor what professional competence looks like in
|
|
4
|
+
a specific field: the concepts, the misconceptions, the authoritative sources,
|
|
5
|
+
and the capstone that proves mastery. The generator ships with curated profiles
|
|
6
|
+
for a few common fields and falls back to a solid generic profile for everything
|
|
7
|
+
else.
|
|
8
|
+
|
|
9
|
+
## Curated profiles (built in)
|
|
10
|
+
|
|
11
|
+
- **quantum computing** — `quantum-computing`
|
|
12
|
+
- **Rust** — `rust`
|
|
13
|
+
- **organic chemistry** — `organic-chemistry`
|
|
14
|
+
- **machine learning** — `machine-learning` (also matches "AI")
|
|
15
|
+
- **macroeconomics** — `macroeconomics`
|
|
16
|
+
- **contract law** — `contract-law`
|
|
17
|
+
|
|
18
|
+
List them anytime:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mentor fields
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Adding your own
|
|
25
|
+
|
|
26
|
+
Create `references/fields.json`. The generator merges it over the built-ins at
|
|
27
|
+
startup. Keys are arbitrary; each value uses this schema:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"my-field": {
|
|
32
|
+
"key": "the Human-readable field name",
|
|
33
|
+
"aliases": ["my field", "alternate spelling", "abbreviation"],
|
|
34
|
+
"mentor_name": "Dr. Example Name",
|
|
35
|
+
"notes": "A paragraph on what professionalism in this field means: the core reasoning, the standards, the traps, and the canonical anchors.",
|
|
36
|
+
"concepts": ["concept 1", "concept 2"],
|
|
37
|
+
"misconceptions": ["wrong model A", "wrong model B"],
|
|
38
|
+
"resources": ["Author, Title", "standard/body/venue"],
|
|
39
|
+
"capstone": "One realistic project that proves competence."
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Writing good notes
|
|
45
|
+
|
|
46
|
+
The `notes` paragraph is the highest-leverage part. A strong profile:
|
|
47
|
+
|
|
48
|
+
1. Names the field's **foundational reasoning** and demands it first.
|
|
49
|
+
2. States the **standards** a professional is held to.
|
|
50
|
+
3. Names the **classic traps** learners fall into.
|
|
51
|
+
4. Points at **real authorities** (textbooks, standards bodies, journals).
|
|
52
|
+
|
|
53
|
+
### Matching rules
|
|
54
|
+
|
|
55
|
+
The resolver checks, in order: exact key / alias match, then substring match,
|
|
56
|
+
then falls back to the generic profile. Aliases let one profile cover many
|
|
57
|
+
phrasings ("ml", "deep learning", "statistical learning").
|
|
58
|
+
|
|
59
|
+
## The generic fallback
|
|
60
|
+
|
|
61
|
+
For fields without a profile, the generator builds notes that force the mentor
|
|
62
|
+
to establish vocabulary and models first, then tools and workflows, then applied
|
|
63
|
+
judgement — while distinguishing consensus from debate and attacking
|
|
64
|
+
misconceptions. This is deliberately field-agnostic but pedagogically strong.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Pedagogy — how the Expert Mentor teaches
|
|
2
|
+
|
|
3
|
+
The mentor is not a content database. It is a teacher, and its behaviour is
|
|
4
|
+
grounded in established learning science. This file explains the methods baked
|
|
5
|
+
into `templates/mentor_system_prompt.md` so you can tune or extend them.
|
|
6
|
+
|
|
7
|
+
## Core principles
|
|
8
|
+
|
|
9
|
+
### 1. Zone of proximal development (Vygotsky)
|
|
10
|
+
Teach just beyond what the learner can already do alone, but within reach with
|
|
11
|
+
guidance. Too easy → boredom; too hard → shutdown. The mentor continuously
|
|
12
|
+
probes to find this band and adjusts step size.
|
|
13
|
+
|
|
14
|
+
### 2. Cognitive load theory (Sweller)
|
|
15
|
+
Working memory is small. Introduce one new element at a time, use worked
|
|
16
|
+
examples early, and only remove the scaffolds once the learner is fluent. This
|
|
17
|
+
is why the mentor does "one concept at a time" and fades support.
|
|
18
|
+
|
|
19
|
+
### 3. Retrieval practice and testing effect (Roediger & Karpicke)
|
|
20
|
+
Pulling knowledge out of memory strengthens it far more than re-reading. Every
|
|
21
|
+
explanation is followed by a question the learner must answer from memory.
|
|
22
|
+
|
|
23
|
+
### 4. Spacing and interleaving
|
|
24
|
+
Spread practice over sessions and mix related problem types rather than
|
|
25
|
+
blocking. The mentor's roadmap revisits earlier milestones and mixes review into
|
|
26
|
+
new practice.
|
|
27
|
+
|
|
28
|
+
### 5. Scaffolding and fading (Wood, Bruner & Ross)
|
|
29
|
+
Support is temporary. The mentor models → guides → watches → steps back.
|
|
30
|
+
|
|
31
|
+
### 6. Formative feedback (Hattie & Timperley)
|
|
32
|
+
Effective feedback answers three questions: Where am I going? How am I going?
|
|
33
|
+
Where to next? The mentor names the exact gap and the next action; it never
|
|
34
|
+
offers vague praise.
|
|
35
|
+
|
|
36
|
+
### 7. Metacognition (Flavell)
|
|
37
|
+
Strong learners monitor their own understanding. The mentor asks the learner to
|
|
38
|
+
predict, self-explain, and summarise — building the habit of self-assessment.
|
|
39
|
+
|
|
40
|
+
### 8. Threshold concepts and misconceptions
|
|
41
|
+
Some ideas are gateways (e.g. pointers, eigenvalues, opportunity cost) that
|
|
42
|
+
unlock everything above. Others are actively wrong mental models that block
|
|
43
|
+
progress. The mentor targets both deliberately.
|
|
44
|
+
|
|
45
|
+
## The teach/practice cycle
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
activate prior knowledge
|
|
49
|
+
↓
|
|
50
|
+
explain + worked example
|
|
51
|
+
↓
|
|
52
|
+
retrieval check (learner answers)
|
|
53
|
+
↓
|
|
54
|
+
correct? ── no ──→ re-teach differently (new analogy, smaller step) → check again
|
|
55
|
+
│ yes
|
|
56
|
+
↓
|
|
57
|
+
guided practice → independent exercise → precise feedback
|
|
58
|
+
↓
|
|
59
|
+
advance milestone or consolidate
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Question types the mentor uses
|
|
63
|
+
|
|
64
|
+
| Type | Example | Purpose |
|
|
65
|
+
|------|---------|---------|
|
|
66
|
+
| Retrieval | "Without looking, what does X do?" | Strengthen memory |
|
|
67
|
+
| Prediction | "What will happen if we change Y?" | Activate reasoning |
|
|
68
|
+
| Self-explanation | "Why does that step work?" | Deepen understanding |
|
|
69
|
+
| Application | "Solve this new case." | Transfer |
|
|
70
|
+
| Contrast | "How is X different from Z?" | Sharpen discrimination |
|
|
71
|
+
| Metacognitive | "How confident are you, and why?" | Calibrate self-assessment |
|
|
72
|
+
|
|
73
|
+
## Adapting to level
|
|
74
|
+
|
|
75
|
+
- **Beginner** — concrete first, heavy analogy, small steps, lots of worked
|
|
76
|
+
examples, frequent checks, no jargon without definition.
|
|
77
|
+
- **Intermediate** — connect ideas into systems, pressure-test with edge cases,
|
|
78
|
+
introduce trade-offs and "why not the obvious approach".
|
|
79
|
+
- **Advanced** — focus on judgement, literature, and frontier debates; the
|
|
80
|
+
learner should be arguing and the mentor should be challenging.
|
|
81
|
+
- **Expert** — peer-level discussion; the mentor probes limits, counterexamples,
|
|
82
|
+
and open problems rather than explaining basics.
|
|
83
|
+
|
|
84
|
+
## What the mentor must never do
|
|
85
|
+
|
|
86
|
+
- Dump a full solution when a hint would teach more.
|
|
87
|
+
- Say "does that make sense?" instead of testing understanding.
|
|
88
|
+
- Praise vaguely ("great!") without naming what was good.
|
|
89
|
+
- Fabricate a source, formula, or API to look authoritative.
|
|
90
|
+
- Let a misconception stand because the learner seemed satisfied.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Providers — deployment recipes
|
|
2
|
+
|
|
3
|
+
The same mentor prompt is adapted per provider because cloud models and local
|
|
4
|
+
models have very different capability envelopes. The generator injects the right
|
|
5
|
+
**capability notes** and emits a format each provider can consume.
|
|
6
|
+
|
|
7
|
+
Run `mentor providers` to see defaults, or `mentor models` for the model catalog.
|
|
8
|
+
|
|
9
|
+
## Capability envelopes
|
|
10
|
+
|
|
11
|
+
| Provider | Aliases | Temperature | Default model | Capability notes |
|
|
12
|
+
|----------|---------|-------------|---------------|------------------|
|
|
13
|
+
| `generic` | — | 0.6 | any capable model | cloud notes |
|
|
14
|
+
| `anthropic` | `claude` | 0.7 | `claude-sonnet-5` | Claude notes + XML shaping |
|
|
15
|
+
| `openai` | `chatgpt`, `gpt`, `oai` | 0.7 | `gpt-5.6` | ChatGPT notes + markdown |
|
|
16
|
+
| `google` | `gemini` | 0.8 | `gemini-2.5-pro` | cloud notes |
|
|
17
|
+
| `ollama` | `local` | 0.4 | `llama3.1:8b` | local notes |
|
|
18
|
+
| `llamacpp` | — | 0.4 | local-gguf | local notes |
|
|
19
|
+
|
|
20
|
+
- **Cloud notes** tell the model to exploit its large context: maintain a
|
|
21
|
+
detailed learner model, use rich analogies, cite real sources when confident.
|
|
22
|
+
- **Claude notes** additionally ask for structured prose / XML tags and a clean
|
|
23
|
+
separation between private deliberation and what the learner sees.
|
|
24
|
+
- **ChatGPT notes** additionally ask for clear markdown structure and explicit
|
|
25
|
+
next steps.
|
|
26
|
+
- **Local notes** tell the model to compensate for limited context and reasoning:
|
|
27
|
+
follow the flow strictly, keep replies short, one question per reply, never
|
|
28
|
+
invent citations, restate the goal each turn.
|
|
29
|
+
|
|
30
|
+
Discover the current model line-up any time:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
mentor models # built-in catalog for Claude + ChatGPT
|
|
34
|
+
mentor models --provider claude --refresh # live lookup with your API key
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Anthropic (Claude)
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
mentor --field "quantum computing" --provider claude --emit json
|
|
41
|
+
mentor run --field "Rust" --provider claude --model claude-sonnet-5
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The generator and runtime both produce a correct **Messages API** request:
|
|
45
|
+
|
|
46
|
+
- the mentor prompt is a top-level `system` **list of blocks** marked with
|
|
47
|
+
`cache_control: {"type": "ephemeral"}` — Anthropic **prompt caching**, a large
|
|
48
|
+
cost/latency win for a long, static system prompt (`--no-cache` disables it);
|
|
49
|
+
- the prompt is re-shaped into **XML section tags** (`<identity>`,
|
|
50
|
+
`<the_teaching_contract>`, …) because Claude follows XML structure well
|
|
51
|
+
(`--prompt-format markdown` opts out);
|
|
52
|
+
- optional **extended thinking**: `--thinking` (`--thinking-budget` default
|
|
53
|
+
4096). When thinking is on, `temperature` is omitted (the API requires the
|
|
54
|
+
default).
|
|
55
|
+
- streaming understands `text_delta` and `thinking_delta`, and reports input,
|
|
56
|
+
**cache-read**, and output tokens per turn.
|
|
57
|
+
|
|
58
|
+
Recommended: `max_tokens>=2048`. Current models: `claude-sonnet-5`,
|
|
59
|
+
`claude-opus-5`, `claude-fable-5-1`, `claude-haiku-4-5`.
|
|
60
|
+
|
|
61
|
+
## OpenAI (ChatGPT)
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mentor --field "organic chemistry" --provider chatgpt --emit json
|
|
65
|
+
mentor run --field "Rust" --provider chatgpt --model gpt-5.6 --reasoning-effort high
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The request shape is adapted automatically from the model name:
|
|
69
|
+
|
|
70
|
+
| Model family | System role | Token limit field | Temperature | Reasoning |
|
|
71
|
+
|--------------|-------------|-------------------|-------------|-----------|
|
|
72
|
+
| `gpt-5*`, `gpt-6*`, `o1…o9*` | `developer` | `max_completion_tokens` | omitted | `reasoning_effort` supported |
|
|
73
|
+
| `gpt-4o`, `gpt-4.1`, etc. | `system` | `max_tokens` | sent | not supported |
|
|
74
|
+
|
|
75
|
+
- `--reasoning-effort` accepts `none|minimal|low|medium|high|xhigh|max` (values
|
|
76
|
+
the model actually supports are a subset).
|
|
77
|
+
- Streaming sets `stream_options.include_usage` and reports token usage.
|
|
78
|
+
- Works unchanged with any OpenAI-compatible endpoint via `$OPENAI_BASE_URL`
|
|
79
|
+
(vLLM, Together, Groq, LM Studio server, …).
|
|
80
|
+
|
|
81
|
+
## Google (Gemini)
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
mentor --field "macroeconomics" --provider google --emit json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Produces a `systemInstruction` + `contents` payload for the Generative Language
|
|
88
|
+
API.
|
|
89
|
+
|
|
90
|
+
## Ollama (local)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
mentor --field "Rust" --level intermediate \
|
|
94
|
+
--provider ollama --emit modelfile --model qwen2.5:7b --compact > Modelfile
|
|
95
|
+
ollama create expert-rust -f Modelfile
|
|
96
|
+
ollama run expert-rust
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The Modelfile pins `SYSTEM`, `temperature`, `num_ctx`, and `top_p`. Use
|
|
100
|
+
`--compact` for 7B-and-under models and raise `--num-ctx` to match the model.
|
|
101
|
+
|
|
102
|
+
## llama.cpp / LM Studio (local)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
mentor --field "music theory" --provider llamacpp --emit json --compact
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Emits a JSON object with `system_prompt`, `temperature`, `n_ctx`, and
|
|
109
|
+
`max_tokens`. In LM Studio, paste `system_prompt` into the system-prompt field
|
|
110
|
+
and match the parameters. In llama.cpp server, pass it via the chat template's
|
|
111
|
+
system slot or your wrapper.
|
|
112
|
+
|
|
113
|
+
## Choosing `--compact`
|
|
114
|
+
|
|
115
|
+
Use `--compact` when:
|
|
116
|
+
|
|
117
|
+
- the model has under ~8k context,
|
|
118
|
+
- the model is 7B parameters or smaller,
|
|
119
|
+
- the model tends to ignore long system prompts.
|
|
120
|
+
|
|
121
|
+
The compact template strips the long teaching contract down to numbered rules
|
|
122
|
+
and a short flow, which small models follow far more reliably.
|
|
123
|
+
|
|
124
|
+
## Tuning tips
|
|
125
|
+
|
|
126
|
+
- **Mentor too passive?** Raise temperature slightly or switch `--style direct`.
|
|
127
|
+
- **Mentor gives answers away?** Switch `--style socratic` and say "don't give
|
|
128
|
+
me the answer yet" in your first message.
|
|
129
|
+
- **Mentor invents sources?** Append "If you are not certain a source exists,
|
|
130
|
+
say so and tell me how to find it." Local notes already include this.
|
|
131
|
+
- **Long-winded local model?** Add your own `num_predict` cap and keep
|
|
132
|
+
`--compact` on.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: expert-mentor
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Summary: Turn any LLM (Claude, ChatGPT, Gemini, Ollama, llama.cpp) into a professional teacher for any field.
|
|
5
|
+
Author: expert-mentor contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/voidstackloop/expert-mentor
|
|
8
|
+
Project-URL: Repository, https://github.com/voidstackloop/expert-mentor
|
|
9
|
+
Project-URL: Issues, https://github.com/voidstackloop/expert-mentor/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/voidstackloop/expert-mentor/releases
|
|
11
|
+
Project-URL: PyPI, https://pypi.org/project/expert-mentor/
|
|
12
|
+
Keywords: llm,mentor,tutor,education,claude,chatgpt,ollama,prompt
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Education
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Topic :: Education
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# expert-mentor
|
|
33
|
+
|
|
34
|
+
Turn any capable LLM — Claude, ChatGPT, Gemini, or a local Ollama / llama.cpp
|
|
35
|
+
model — into a **professional teacher for any field**.
|
|
36
|
+
|
|
37
|
+
`expert-mentor` generates a calibrated expert-mentor system prompt for a given
|
|
38
|
+
field and level, runs the tutoring session directly, remembers what the learner
|
|
39
|
+
has mastered across sessions, and assesses progress from the transcript.
|
|
40
|
+
|
|
41
|
+
## Highlights
|
|
42
|
+
|
|
43
|
+
- **Provider-native prompts** — XML-shaped, prompt-cached system blocks for
|
|
44
|
+
Claude; `developer` role, `max_completion_tokens`, and `reasoning_effort` for
|
|
45
|
+
ChatGPT reasoning models.
|
|
46
|
+
- **Live sessions** over Anthropic, OpenAI, Ollama, and llama.cpp (standard
|
|
47
|
+
library only, no `pip install` needed to run).
|
|
48
|
+
- **Persistent learner memory** — mastered / shaky / misconceptions / open
|
|
49
|
+
questions, injected into every future session.
|
|
50
|
+
- **Model-assisted review** — turn a session transcript into an updated profile.
|
|
51
|
+
- **Curriculum design**, saved mentors, live model discovery, and a config file.
|
|
52
|
+
- **Zero runtime dependencies**; Python 3.8+.
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pipx install expert-mentor # or: pip install expert-mentor
|
|
58
|
+
mentor --field "quantum computing" --level beginner
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Quick start
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mentor run --field "Rust" --provider claude --remember
|
|
65
|
+
mentor curriculum --field "Rust" --duration "6 weeks"
|
|
66
|
+
mentor fields
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
MIT licensed.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
pyproject.toml
|
|
3
|
+
references/fields.md
|
|
4
|
+
references/pedagogy.md
|
|
5
|
+
references/providers.md
|
|
6
|
+
scripts/expert_mentor.py
|
|
7
|
+
scripts/mentor_cards.py
|
|
8
|
+
scripts/mentor_memory.py
|
|
9
|
+
scripts/mentor_runtime.py
|
|
10
|
+
scripts/expert_mentor.egg-info/PKG-INFO
|
|
11
|
+
scripts/expert_mentor.egg-info/SOURCES.txt
|
|
12
|
+
scripts/expert_mentor.egg-info/dependency_links.txt
|
|
13
|
+
scripts/expert_mentor.egg-info/entry_points.txt
|
|
14
|
+
scripts/expert_mentor.egg-info/top_level.txt
|
|
15
|
+
templates/cards_prompt.md
|
|
16
|
+
templates/compact_prompt.md
|
|
17
|
+
templates/curriculum_prompt.md
|
|
18
|
+
templates/mentor_system_prompt.md
|
|
19
|
+
templates/review_prompt.md
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|