providers: presets for polza/openai/ollama (--provider), keys from env, gpt-5.6-luna default for polza, multimodal heuristic for cloud ids

This commit is contained in:
opencode
2026-08-08 20:09:19 +03:00
parent 1d7dbb7b79
commit 54ee734ab5
4 changed files with 211 additions and 12 deletions
+35 -6
View File
@@ -32,11 +32,14 @@ import sys
from aicc.client import AICCClient
from aicc.transport.websocket import WebSocketClientTransport
from testbed.llm_agent import CHAT_MISSION, LLMController, ollama_models
from testbed.llm_agent import (
CHAT_MISSION,
LLMController,
ollama_models,
resolve_provider,
)
DEFAULT_URL = "ws://127.0.0.1:8765"
DEFAULT_BASE_URL = "http://localhost:11434/v1"
DEFAULT_MODEL = "gemma4:e2b"
HELP = """\
You are talking to the capsule's brain (LLM). Type what you want, e.g.:
@@ -393,12 +396,26 @@ def main() -> int:
help=f"bridge WebSocket URL (default {DEFAULT_URL})",
)
parser.add_argument(
"--base-url", default=DEFAULT_BASE_URL, help="OpenAI-compatible endpoint"
"--base-url",
default=None,
help="OpenAI-compatible endpoint (default per --provider)",
)
parser.add_argument(
"--model", default=DEFAULT_MODEL, help="model id on the endpoint"
"--provider",
choices=["polza", "openai", "ollama"],
default=None,
help="provider preset: endpoint + key from env (POLZA_API_KEY/OPENAI_API_KEY)",
)
parser.add_argument(
"--model",
default=None,
help="model id on the endpoint (default per provider: polza -> openai/gpt-5.6-luna)",
)
parser.add_argument(
"--api-key",
default=None,
help="API key (default: $POLZA_API_KEY / $OPENAI_API_KEY per provider)",
)
parser.add_argument("--api-key", default="ollama", help="API key for the endpoint")
parser.add_argument(
"--auto-steps",
type=int,
@@ -447,6 +464,18 @@ def main() -> int:
help="attach a fresh camera frame every N turns (0 disables; default 3)",
)
args = parser.parse_args()
try:
args.base_url, args.api_key, args.model = resolve_provider(
provider=args.provider,
base_url=args.base_url,
api_key=args.api_key,
model=args.model,
)
if args.provider:
print(f"[chat] provider: {args.provider} -> {args.base_url} model: {args.model}")
except ValueError as exc:
print(f"[chat] {exc}")
return 1
try:
return asyncio.run(run(args))
except KeyboardInterrupt: