A collection of Python tools and REPL implementations for local AI engineering with Ollama, including fine-tuning, CLI utilities, and multi-pass chat applications with memory, caching, and tool integration
Two tools with basic verb-noun naming (get_air_quality, get_temperature) and short descriptions (50-60 chars). Input schemas present with single 'location' parameter typed as string. Descriptions lack depth on when/why to use, expected output format, or error recovery. No output schema documented. No parameter constraints (enums, ranges). Error handling present in code (raise_for_status, ValueError) but not surfaced in tool definitions. Tools are READ_ONLY and idempotent, which is good, but definitions do not declare this. Missing: pagination guidance, rate-limit warnings, coordinate caching hints.
Get current air quality (PM10 and PM2.5) for a named location.
Get the current temperature in Celsius for a named location.
Tool descriptions are too brief (50-60 chars). Missing context on when to use, expected output format, and error recovery guidance. LLMs cannot reliably select between similar tools or plan multi-step calls.
No output schema documented. LLMs cannot predict return structure (string vs object, fields present, data types). Breaks downstream tool chaining and forces parsing of unstructured text.
Parameter 'location' lacks constraints. No enum, regex, or length limits. LLMs may pass invalid location names, requiring retry loops. Description should specify format (e.g., 'city name or 'city, country').
Tool definitions do not declare idempotency or read-only nature. Code uses @tool decorator from LangChain, which does not expose tool annotations (readOnlyHint, idempotentHint) to the MCP protocol.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Error handling is implicit in code (raise_for_status, ValueError) but not documented in tool descriptions. LLMs do not know what errors are possible, when to retry, or how to recover.