3.2 KiB
3.2 KiB
AGENTS.md
This project is a Python library for generating structured math problems. The intended design should scale to grades 1 through 6 and multiple problem types per grade.
Run And Test
- Run tests with
uv run python -m unittest. - Compile changed Python files with
uv run python -m py_compile <files>. - Run the usage example with
uv run python test-lib.py. - Run the HTTP server with
uv run math-problems-server. - Open the server docs at
http://localhost:8000/docsafter starting the server.
Usage example
from math_problems_structure.grade_1 import join_pictures_with_quantity- The caller passes image metadata and optional generation settings.
- The function returns a JSON-ready math problem where students count images and match groups to numbers.
Responsibilities
math_problems_structure/__init__.pyandmath_problems_structure/grade_1/expose public library functions.math_problems_structure/core/problems/grade_1/contains reusable generation logic for grade 1 problems.math_problems_structure/core/schemas/grade_1/contains Pydantic request/response models for grade 1 problems.math_problems_structure/server/contains the FastAPI app, CLI, and routes used to test the core library over HTTP.tests/contains direct function tests and server adapter tests.
Design Rules
- Keep generation logic in
math_problems_structure/core/problems/. - Keep all Pydantic models in
math_problems_structure/core/schemas/. - Keep HTTP/server code in
math_problems_structure/server/; server routes should call core generators rather than duplicating generation logic. - Keep public import wrappers in
math_problems_structure/grade_*/small and explicit. - Prefer one schema file per problem type.
- Prefer one generator file per problem type.
Adding A New Problem Type
For a new grade 1 problem named example_problem:
- Add schemas in
math_problems_structure/core/schemas/grade_1/example_problem.py. - Add generator logic in
math_problems_structure/core/problems/grade_1/example_problem.py. - Export the function from
math_problems_structure/core/problems/grade_1/__init__.py. - Export the public function from
math_problems_structure/grade_1/__init__.pyandmath_problems_structure/__init__.pyif callers should import it directly. - Add a server route in
math_problems_structure/server/routes/grade_1.pyif the problem should be testable over HTTP. - Add direct function tests in
tests/and server route tests when applicable. - Run
uv run python -m unittest.
For a new grade, follow the same pattern:
- Add
math_problems_structure/core/schemas/grade_2/andmath_problems_structure/core/problems/grade_2/. - Add a public wrapper package such as
math_problems_structure/grade_2/. - Add server routes under
math_problems_structure/server/routes/if HTTP access is needed. - Export public functions from the relevant package
__init__.pyfiles. - Add tests.
Naming Conventions
- Python package names should use valid identifiers like
grade_1. - Problem files should use snake case, for example
join_pictures_with_quantity.py. - Request schema names should end in
Request. - Response schema names should describe the generated problem, for example
JoinPicturesWithQuantityProblem.