Skip to content

[4.D.2] Provider factory + env var wiring (get_provider, ModelSelector) #544

@frankbria

Description

@frankbria

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

  • CODEFRAME_LLM_PROVIDER=openai uv run cf work start <id> --execute uses OpenAI provider
  • OPENAI_BASE_URL=http://localhost:11434/v1 routes to Ollama
  • No flags set → Anthropic behavior unchanged
  • Tests cover all three paths: anthropic, openai, mock

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphase-4Phase 4: Multi-Agent Coordination

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions