feat(adapter/typed-decision-local): local model backend for contract:typed-decision (llama.cpp / Ollama / vLLM)
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 42/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- ollama, python
- Domain
- ai-infra-agents, backend-api-design
Research direction
Start by reading tools/typed-decision/tool.md, especially the Interface section, then review the existing cloud backend introduced by PR #1402 and the adapter guidance in docs/adapters/registry.md. Confirm how local OpenAI-compatible and Ollama endpoints expose structured outputs, and use docs/vendor-neutrality.md to define the supported configuration. Done means a local DecisionProvider supports choice and score while failing open with TypedDecisionUnavailable on connection, timeout, or schema failure.
Written by the indexing model from the issue text.
Description
Goal: A local-model backend adapter for \contract:typed-decision\ (\ ools/typed-decision/), supporting llama.cpp, Ollama, or vLLM endpoints.
Why: PR #1402 introduced the \contract:typed-decision\ interface with TypeSafe Jev API as the initial cloud backend. Providing a local-model backend enables offline, zero-egress structured decisions without third-party network calls and establishes a second independent backend for vendor neutrality.
What it needs to do (see \ ools/typed-decision/tool.md\ § Interface):
- Implement \DecisionProvider\ (\choice, \score,
oul) against local OpenAI-compatible or Ollama endpoints (e.g. \http://localhost:11434/v1\ or \http://localhost:8080/v1). - Support structured outputs via JSON schema or constrained grammars (e.g. GBNF) for discrete choice selection and bounded scale evaluation.
- Strictly adhere to \TypedDecisionUnavailable\ fail-open semantics on connection, timeout, or schema failure.
References: \ ools/typed-decision/tool.md, \docs/adapters/registry.md, \docs/vendor-neutrality.md.
- Dominant language
- Python
- Stars
- 113
- Forks
- 95
- Avg merge
- 10h 48m
- Merged PRs (30d)
- 348
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/magpie
-
agent-guard: the +refspec force spelling bypasses the empty-rebase guardPossibly taken @liwenjie200543 claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
apache/magpie#1606 · 1 comment ·
Maintainers usually reply within 1 day
-
PR stats parity tests can publish or overwrite real gistsPossibly taken @MakerFlyFly claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-2 days Newbie friendliness 64/100
Maintainers usually reply within 1 day
-
Marketplace install fails with GitHub CopilotPossibly taken @opwvhk claimed this today. Openbug
Difficulty 3/5 Half a day Newbie friendliness 45/100
Maintainers usually reply within 1 day
Similar issues
-
Atomic append fails to create a missing filePossibly taken @harbinresearcher claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
fabiocaccamo/python-fsutil#201 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
task
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
danparshall/claude_researcher#87 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
GhostManager/Ghostwriter#998 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
datajoint/datajoint-python#1586 ·
Maintainers usually reply within 1 day