added MiniMax, and made eval and compile configurable#139
Open
MakiWinster72 wants to merge 7 commits into
Open
added MiniMax, and made eval and compile configurable#139MakiWinster72 wants to merge 7 commits into
MakiWinster72 wants to merge 7 commits into
Conversation
…ig.yaml - Add eval_concurrency and compile_concurrency to DEFAULT_CONFIG - run_eval reads from <kb>/.openkb/config.yaml; falls back to EVAL_CONCURRENCY - compile_short_doc / compile_long_doc: param > config > DEFAULT_COMPILE_CONCURRENCY - openkb init writes both fields into new KB config.yaml
- Add --base-url CLI flag (-u) to `openkb init` for non-interactive setup - Prompt for base URL only when the chosen model's provider isn't in _KNOWN_PUBLIC_PROVIDERS (openai, anthropic, gemini, deepseek, ...) - Map the URL to the provider-specific *_API_BASE env var (OPENAI_API_BASE, OLLAMA_API_BASE, ...) via _PROVIDER_TO_BASE_ENV and write it alongside LLM_API_KEY in the KB-local .env (chmod 600) - _setup_llm_key reads the env var and applies it to litellm.api_base so LiteLLM uses the override on every request - Emit a post-init reminder pointing the user at .env and .openkb/config.yaml - .env.example: document the *_API_BASE convention - Tests: 9 new cases (public/custom provider, flag, key+url together, blank skip, existing .env preserved, control-char/length rejection, post-init reminder)
MiniMax ships two regional endpoints under the same ``minimax/`` LiteLLM provider prefix (global vs China), so the generic base-URL skip for known public providers doesn't apply. Detect ``minimax/`` models and run a dedicated region picker instead; the chosen URL is written as ``MINIMAX_API_BASE`` in the KB-local .env. - Add _MINIMAX_GLOBAL_URL / _MINIMAX_CHINA_URL constants - Add ``minimax`` to _KNOWN_PUBLIC_PROVIDERS and _PROVIDER_TO_BASE_ENV (-> MINIMAX_API_BASE) - Add MINIMAX_API_KEY to _KNOWN_PROVIDER_KEYS so _setup_llm_key propagates LLM_API_KEY to MiniMax for the Agents-SDK litellm provider - _prompt_minimax_region(): interactive picker that re-prompts on unrecognised input (1/Global default, 2/China) — a typo can't silently route the user to the wrong region - Non-TTY init falls back to the global endpoint silently; users who need China there can pass --base-url explicitly - Model picker text gains a MiniMax row (M2.7 / M3) Tests: 9 new cases — global/china via picker, default-global under non-TTY, --base-url overrides picker, invalid choice re-prompts, key + URL written together, _KNOWN_PROVIDER_KEYS / _PROVIDER_TO_BASE_ENV contain MiniMax, _setup_llm_key applies MINIMAX_API_BASE.
The region picker fired for ``minimax/`` models but its three short
lines were easy to miss in the scroll of surrounding model / API-key /
language prompts — users reported only seeing "key and language", which
meant the picker silently routed them to the wrong region (or the
model was never MiniMax to begin with).
- Add blank-line + box-drawing separators and a "── MiniMax region ──"
heading so the picker can't be confused with the prompts around it
- Header text now also explains *why* the picker appears ("two regional
endpoints under the same `minimax/` LiteLLM prefix")
- Options re-numbered as `[1]` / `[2]` to match the prompt text
- Test: new case covers the picker firing when the user TYPES the model
interactively, not only when --model is passed (catches future
regressions where the picker would be silently skipped)
- Tests: update wording assertions to match the new visible text
Previously, ``openkb init`` skipped writing .env entirely when the user provided neither an API key nor a base URL. That left a freshly-initialised KB without any discoverable target for credentials — users had to know that ``LLM_API_KEY`` was the right name and that they could drop it into a file the CLI hadn't created yet. - .env is now ALWAYS created on init (chmod 0600), with commented placeholders for every field the user skipped. Missing fields show the exact env-var name to use (e.g. ``MINIMAX_API_BASE`` for MiniMax, ``ANTHROPIC_API_BASE`` for Anthropic) so the user can copy the line and uncomment it later. - Refactor: pull the .env content builder into ``_build_env_content()`` so it's unit-testable in isolation and stays in sync with whatever fields the active provider expects. - Output message adapts: ``Saved to .env: ...`` when values were written, ``Created .env with commented placeholders — fill in your API key before running compile.`` when everything was empty. Tests: - 3 new tests cover the builder directly (no provider, provider + active key, MiniMax-no-key) - ``test_init_base_url_blank_prompt_still_writes_env_with_comments`` replaces the old "no .env" assertion with the new always-create behaviour and verifies both placeholders appear commented and chmod 600 is applied even for an all-comments file - The ``LLM_API_KEY=sk...`` check elsewhere is replaced with a line-by-line scan that catches active assignments even when the string happens to appear inside a comment Co-Authored-By: Claude <noreply@anthropic.com>
Every LiteLLM provider reads its own ``*_API_KEY`` env var
(``OPENAI_API_KEY``, ``ANTHROPIC_API_KEY``, ``GEMINI_API_KEY``, ...)
and ``openkb init`` was writing everything under the generic
``LLM_API_KEY``. That works — ``_setup_llm_key`` propagated it to
every known provider — but the .env file then looked generic and
mysterious. Users reading the file wouldn't immediately see which
variable their OpenAI / Anthropic / MiniMax key should land in.
- Add ``_PROVIDER_KEY_ENV``: provider prefix → canonical LiteLLM
key env var. Sources (LiteLLM docs, verified):
* OPENAI_API_KEY docs.litellm.ai/docs/set_keys
* ANTHROPIC_API_KEY docs.litellm.ai/docs/providers/anthropic
* GEMINI_API_KEY docs.litellm.ai/docs/providers/gemini
* DEEPSEEK_API_KEY docs.litellm.ai/docs/providers/deepseek
* MISTRAL_API_KEY docs.litellm.ai/docs/providers/mistral
* MOONSHOT_API_KEY docs.litellm.ai/docs/providers/moonshot
* DASHSCOPE_API_KEY docs.litellm.ai/docs/providers/dashscope
* OPENROUTER_API_KEY docs.litellm.ai/docs/providers/openrouter
* MINIMAX_API_KEY user-specified
* ZHIPUAI_API_KEY LiteLLM renamed the provider to "Z.AI" but
the ``zhipuai/`` prefix is unchanged, so the
env var stays the same.
* ollama: no key (local server, ``None``)
* vllm: HOSTED_VLLM_API_KEY (optional, per LiteLLM docs)
- ``_build_env_content`` now writes the key under the provider-specific
name and renders its commented placeholder to match. Unknown / custom
providers fall back to ``LLM_API_KEY`` so legacy flows still work.
- ``_setup_llm_key`` reads the provider-specific env var FIRST and only
falls back to ``LLM_API_KEY`` when it's unset, so a user who follows
the new .env format never sees the spurious "no key found" warning.
- Keyless providers (ollama) get no key section at all — emitting a
placeholder would mislead the user into hunting for a credential
that doesn't exist.
Tests:
- Parametrised matrix covers all 10 known providers; asserts the
active line uses the right ``*_API_KEY`` env var
- ``_key_env_for_provider`` unit test (known / unknown / keyless)
- ``_setup_llm_key`` reads provider-specific env var directly
(no LLM_API_KEY needed)
- ``test_init_ollama_provider_no_key_section``: no ``_API_KEY=`` line
- Existing tests updated to assert on provider-specific env vars
(``OPENAI_API_KEY``, ``ANTHROPIC_API_KEY``, ``MINIMAX_API_KEY``,
``HOSTED_VLLM_API_KEY``) instead of the generic ``LLM_API_KEY``
Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Added MiniMax as an option during init. After init, generates
.envat the project root and automatically uses XXX_API_KEY, only falling back to LLM_API_KEY for unknown providers — making it easy for users to edit base URL and key.and made eval and compile configurable in config.yaml so that users who would otherwise hit their subscription rate limits can dial down the concurrency.
just after init
