diff --git a/cubbi/container.py b/cubbi/container.py index cb565fd..37bf60f 100644 --- a/cubbi/container.py +++ b/cubbi/container.py @@ -208,9 +208,10 @@ class ContainerManager: # Set SSH environment variable env_vars["CUBBI_SSH_ENABLED"] = "true" if ssh else "false" - # Pass API keys from host environment to container for local development - api_keys = [ + # Pass some environment from host environment to container for local development + keys = [ "OPENAI_API_KEY", + "OPENAI_URL", "ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_CUSTOM_HEADERS", @@ -220,7 +221,7 @@ class ContainerManager: "LANGFUSE_INIT_PROJECT_SECRET_KEY", "LANGFUSE_URL", ] - for key in api_keys: + for key in keys: if key in os.environ and key not in env_vars: env_vars[key] = os.environ[key] diff --git a/cubbi/images/aider/aider_plugin.py b/cubbi/images/aider/aider_plugin.py index 7f6dc1b..783a1b1 100755 --- a/cubbi/images/aider/aider_plugin.py +++ b/cubbi/images/aider/aider_plugin.py @@ -101,6 +101,12 @@ class AiderPlugin(ToolPlugin): "OPENROUTER_API_KEY": "OPENROUTER_API_KEY", } + # Check for OpenAI API base URL + openai_url = os.environ.get("OPENAI_URL") + if openai_url: + env_vars["OPENAI_API_BASE"] = openai_url + self.status.log(f"Set OpenAI API base URL to {openai_url}") + # Check for standard API keys for env_var, aider_var in api_key_mappings.items(): value = os.environ.get(env_var) diff --git a/cubbi/images/goose/goose_plugin.py b/cubbi/images/goose/goose_plugin.py index 7cd88ed..d30671f 100644 --- a/cubbi/images/goose/goose_plugin.py +++ b/cubbi/images/goose/goose_plugin.py @@ -111,6 +111,13 @@ class GoosePlugin(ToolPlugin): config_data["GOOSE_PROVIDER"] = goose_provider self.status.log(f"Set GOOSE_PROVIDER to {goose_provider}") + # If provider is OpenAI and OPENAI_URL is set, configure OPENAI_HOST + if goose_provider.lower() == "openai": + openai_url = os.environ.get("OPENAI_URL") + if openai_url: + config_data["OPENAI_HOST"] = openai_url + self.status.log(f"Set OPENAI_HOST to {openai_url}") + try: with config_file.open("w") as f: yaml.dump(config_data, f) diff --git a/cubbi/images/opencode/opencode_plugin.py b/cubbi/images/opencode/opencode_plugin.py index 39f83f1..20bcde0 100644 --- a/cubbi/images/opencode/opencode_plugin.py +++ b/cubbi/images/opencode/opencode_plugin.py @@ -117,6 +117,16 @@ class OpencodePlugin(ToolPlugin): api_key = os.environ.get(env_var) if api_key: auth_data[provider] = {"type": "api", "key": api_key} + + # Add custom endpoint URL for OpenAI if available + if provider == "openai": + openai_url = os.environ.get("OPENAI_URL") + if openai_url: + auth_data[provider]["baseURL"] = openai_url + self.status.log( + f"Added OpenAI custom endpoint URL: {openai_url}" + ) + self.status.log(f"Added {provider} API key to auth configuration") # Only write file if we have at least one API key diff --git a/cubbi/user_config.py b/cubbi/user_config.py index 70718c1..78b4141 100644 --- a/cubbi/user_config.py +++ b/cubbi/user_config.py @@ -14,6 +14,7 @@ ENV_MAPPINGS = { "services.langfuse.public_key": "LANGFUSE_INIT_PROJECT_PUBLIC_KEY", "services.langfuse.secret_key": "LANGFUSE_INIT_PROJECT_SECRET_KEY", "services.openai.api_key": "OPENAI_API_KEY", + "services.openai.url": "OPENAI_URL", "services.anthropic.api_key": "ANTHROPIC_API_KEY", "services.openrouter.api_key": "OPENROUTER_API_KEY", "services.google.api_key": "GOOGLE_API_KEY",