"""GitHub Models provider — frontier slot in $0-budget bakeoff. Endpoint: https://models.github.ai/inference (OpenAI-compatible REST shape). Model names use the publisher/name form, e.g. ``openai/gpt-4o-mini``. Auth: GitHub Personal Access Token with ``models:read`` permission (fine-grained PAT). Free for personal GitHub accounts with daily rate limits. """ from __future__ import annotations from openai import OpenAI from nl_sql.llm.providers._openai_compat import chat_complete from nl_sql.llm.providers.base import ( GenerateRequest, GenerateResponse, ProviderError, ) class GitHubModelsProvider: name: str = "github_models" def __init__( self, token: str, model: str = "openai/gpt-4o-mini", base_url: str = "https://models.github.ai/inference", ) -> None: if not token: raise ProviderError("GitHubModelsProvider requires non-empty GitHub PAT") self.model = model self._client = OpenAI(api_key=token, base_url=base_url) def generate(self, req: GenerateRequest) -> GenerateResponse: return chat_complete(self._client, self.model, req)