This function attempts to interpret a farmer's free-text description of a sowing window using a combination of deterministic rules and an LLM fallback (only AI is implemented now). It returns a structured sowing window with start/end dates and any assumptions made.
resolve_sowing(sowing_input, use_ai = TRUE, use_cache = TRUE)A list with fields: type, start, end, shift, source, raw_input, assumptions. If not resolvable, type is "unknown".
# Example with AI backend configured:
# resolve_sowing("early May")
# resolve_sowing("mid June")
# resolve_sowing("unknown phrase")