Parent
Part of #542 — Multi-provider LLM support
Depends on
#543 — OpenAI adapter must exist first
What
Wire the provider factory and ModelSelector to support OpenAI-compatible providers via environment variables. No CLI changes yet (that is #545).
Files to modify
codeframe/adapters/llm/__init__.py — extend get_provider()
codeframe/adapters/llm/base.py — extend ModelSelector defaults
codeframe/core/runtime.py — read provider from env, pass to get_provider()
tests/adapters/test_llm.py — extend existing tests
Implementation notes
get_provider() factory:
def get_provider(provider_type: str = "anthropic", **kwargs) -> LLMProvider:
if provider_type in ("openai", "ollama", "vllm", "compatible"):
from codeframe.adapters.llm.openai import OpenAIProvider
return OpenAIProvider(
api_key=os.environ.get("OPENAI_API_KEY", ""),
model=kwargs.get("model", os.environ.get("CODEFRAME_LLM_MODEL", "gpt-4o")),
base_url=os.environ.get("OPENAI_BASE_URL"),
)
# existing anthropic + mock paths unchanged
New env vars to document:
CODEFRAME_LLM_PROVIDER=openai # selects provider (default: anthropic)
CODEFRAME_LLM_MODEL=qwen2.5-coder # overrides model for all purposes
OPENAI_API_KEY=... # required when provider=openai
OPENAI_BASE_URL=http://... # optional, for local models
ModelSelector defaults: When provider is openai, default model should be gpt-4o (overrideable via CODEFRAME_LLM_MODEL or purpose-specific vars). Existing Anthropic defaults unchanged.
runtime.py: Where get_provider("anthropic") is hardcoded today, read CODEFRAME_LLM_PROVIDER env var instead.
Acceptance criteria
Parent
Part of #542 — Multi-provider LLM support
Depends on
#543 — OpenAI adapter must exist first
What
Wire the provider factory and
ModelSelectorto support OpenAI-compatible providers via environment variables. No CLI changes yet (that is #545).Files to modify
codeframe/adapters/llm/__init__.py— extendget_provider()codeframe/adapters/llm/base.py— extendModelSelectordefaultscodeframe/core/runtime.py— read provider from env, pass toget_provider()tests/adapters/test_llm.py— extend existing testsImplementation notes
get_provider()factory:New env vars to document:
ModelSelectordefaults: When provider isopenai, default model should begpt-4o(overrideable viaCODEFRAME_LLM_MODELor purpose-specific vars). Existing Anthropic defaults unchanged.runtime.py: Whereget_provider("anthropic")is hardcoded today, readCODEFRAME_LLM_PROVIDERenv var instead.Acceptance criteria
CODEFRAME_LLM_PROVIDER=openai uv run cf work start <id> --executeuses OpenAI providerOPENAI_BASE_URL=http://localhost:11434/v1routes to Ollama