What problem does it solve? Writing LLM-powered functions in Jac requires wiring prompts, parsing free-form model output into typed values, configuring providers, and testing without API keys. This Skill documents the by llm(...) syntax that replaces a function body with an LLM call returning typed objects, enums, or lists. ## Core Features & Use Cases - Structured Outputs: Return typed objs, enums, lists, and optional values directly from LLM calls, with sem statements serving as the prompt schema. - Tool Use & ReAct Agents: Pass function references via tools=[...] to enable automatic ReAct loops, including bound object methods as tools. - Provider Configuration: Configure OpenAI, Anthropic, Google, Ollama, or built-in local models via Model, jac.toml, or environment variables. - MockLLM Testing: Test LLM functions without API keys using sequential mock outputs. - Use Case: Build a ticket classifier that returns a typed Priority enum, or a ReAct agent that answers questions by calling a word_count tool, all testable offline with MockLLM. ## Quick Start Show me how to write a Jac function that summarizes text into a structured object using by llm with sem descriptions.