mirror of
https://github.com/Monadical-SAS/cubbi.git
synced 2025-12-20 12:19:07 +00:00
feat(llm): add default model/provider to auto configure the driver (#7)
This commit is contained in:
@@ -163,6 +163,10 @@ def create_session(
|
||||
gid: Optional[int] = typer.Option(
|
||||
None, "--gid", help="Group ID to run the container as (defaults to host user)"
|
||||
),
|
||||
model: Optional[str] = typer.Option(None, "--model", "-m", help="Model to use"),
|
||||
provider: Optional[str] = typer.Option(
|
||||
None, "--provider", "-p", help="Provider to use"
|
||||
),
|
||||
ssh: bool = typer.Option(False, "--ssh", help="Start SSH server in the container"),
|
||||
) -> None:
|
||||
"""Create a new MC session
|
||||
@@ -269,6 +273,8 @@ def create_session(
|
||||
uid=target_uid,
|
||||
gid=target_gid,
|
||||
ssh=ssh,
|
||||
model=model,
|
||||
provider=provider,
|
||||
)
|
||||
|
||||
if session:
|
||||
|
||||
@@ -113,6 +113,8 @@ class ContainerManager:
|
||||
container_id=container_id,
|
||||
created_at=container.attrs["Created"],
|
||||
project=labels.get("mc.project"),
|
||||
model=labels.get("mc.model"),
|
||||
provider=labels.get("mc.provider"),
|
||||
)
|
||||
|
||||
# Get port mappings
|
||||
@@ -148,6 +150,8 @@ class ContainerManager:
|
||||
run_command: Optional[str] = None,
|
||||
uid: Optional[int] = None,
|
||||
gid: Optional[int] = None,
|
||||
model: Optional[str] = None,
|
||||
provider: Optional[str] = None,
|
||||
ssh: bool = False,
|
||||
) -> Optional[Session]:
|
||||
"""Create a new MC session
|
||||
@@ -456,8 +460,8 @@ class ContainerManager:
|
||||
|
||||
# Determine container command and entrypoint
|
||||
container_command = None
|
||||
entrypoint = None # Keep this initially None to mean "use Dockerfile default unless overridden"
|
||||
target_shell = "/bin/bash" # Default final shell
|
||||
entrypoint = None
|
||||
target_shell = "/bin/bash"
|
||||
|
||||
if run_command:
|
||||
# Set environment variable for mc-init.sh to pick up
|
||||
@@ -477,6 +481,14 @@ class ContainerManager:
|
||||
"Using default container entrypoint/command for interactive shell."
|
||||
)
|
||||
|
||||
# Set default model/provider from user config if not explicitly provided
|
||||
env_vars["MC_MODEL"] = model or self.user_config_manager.get(
|
||||
"defaults.model", ""
|
||||
)
|
||||
env_vars["MC_PROVIDER"] = provider or self.user_config_manager.get(
|
||||
"defaults.provider", ""
|
||||
)
|
||||
|
||||
# Create container
|
||||
container = self.client.containers.create(
|
||||
image=driver.image,
|
||||
@@ -605,10 +617,12 @@ class ContainerManager:
|
||||
created_at=container.attrs["Created"],
|
||||
ports=ports,
|
||||
mcps=mcp_names,
|
||||
run_command=run_command, # Store the command
|
||||
run_command=run_command,
|
||||
uid=uid,
|
||||
gid=gid,
|
||||
ssh=ssh, # Store SSH setting
|
||||
model=model,
|
||||
provider=provider,
|
||||
ssh=ssh,
|
||||
)
|
||||
|
||||
# Save session to the session manager
|
||||
|
||||
@@ -49,7 +49,7 @@ if [ -d /root/.local/bin ]; then
|
||||
echo "Copying /root/.local/bin to /home/mcuser/.local/bin..."
|
||||
mkdir -p /home/mcuser/.local/bin
|
||||
cp -r /root/.local/bin/* /home/mcuser/.local/bin/
|
||||
chown -R $MC_USER_ID:$MC_GROUP_ID /home/mcuser/.local/bin
|
||||
chown -R $MC_USER_ID:$MC_GROUP_ID /home/mcuser/.local
|
||||
fi
|
||||
|
||||
# Start SSH server only if explicitly enabled
|
||||
@@ -158,16 +158,16 @@ else
|
||||
echo "Warning: update-goose-config.py script not found. Goose configuration will not be updated."
|
||||
fi
|
||||
|
||||
# Mark initialization as complete
|
||||
echo "=== MC Initialization completed at $(date) ==="
|
||||
echo "INIT_COMPLETE=true" > /init.status
|
||||
|
||||
# Run the user command first, if set, as mcuser
|
||||
if [ -n "$MC_RUN_COMMAND" ]; then
|
||||
echo '--- Executing initial command: $MC_RUN_COMMAND ---';
|
||||
echo "--- Executing initial command: $MC_RUN_COMMAND ---";
|
||||
gosu mcuser sh -c "$MC_RUN_COMMAND"; # Run user command as mcuser
|
||||
COMMAND_EXIT_CODE=$?;
|
||||
echo "--- Initial command finished (exit code: $COMMAND_EXIT_CODE) ---";
|
||||
fi;
|
||||
|
||||
# Mark initialization as complete
|
||||
echo "=== MC Initialization completed at $(date) ==="
|
||||
echo "INIT_COMPLETE=true" > /init.status
|
||||
|
||||
exec gosu mcuser "$@"
|
||||
|
||||
@@ -30,6 +30,26 @@ def update_config():
|
||||
if "extensions" not in config_data:
|
||||
config_data["extensions"] = {}
|
||||
|
||||
# Add default developer extension
|
||||
config_data["extensions"]["developer"] = {
|
||||
"enabled": True,
|
||||
"name": "developer",
|
||||
"timeout": 300,
|
||||
"type": "builtin",
|
||||
}
|
||||
|
||||
# Update goose configuration with model and provider from environment variables
|
||||
goose_model = os.environ.get("MC_MODEL")
|
||||
goose_provider = os.environ.get("MC_PROVIDER")
|
||||
|
||||
if goose_model:
|
||||
config_data["GOOSE_MODEL"] = goose_model
|
||||
print(f"Set GOOSE_MODEL to {goose_model}")
|
||||
|
||||
if goose_provider:
|
||||
config_data["GOOSE_PROVIDER"] = goose_provider
|
||||
print(f"Set GOOSE_PROVIDER to {goose_provider}")
|
||||
|
||||
# Get MCP information from environment variables
|
||||
mcp_count = int(os.environ.get("MCP_COUNT", "0"))
|
||||
mcp_names_str = os.environ.get("MCP_NAMES", "[]")
|
||||
|
||||
@@ -104,11 +104,13 @@ class Session(BaseModel):
|
||||
project: Optional[str] = None
|
||||
created_at: str
|
||||
ports: Dict[int, int] = Field(default_factory=dict)
|
||||
mcps: List[str] = Field(default_factory=list) # List of MCP server names
|
||||
run_command: Optional[str] = None # Command executed on start
|
||||
uid: Optional[int] = None # Store UID used
|
||||
gid: Optional[int] = None # Store GID used
|
||||
ssh: bool = False # Whether SSH server is enabled
|
||||
mcps: List[str] = Field(default_factory=list)
|
||||
run_command: Optional[str] = None
|
||||
uid: Optional[int] = None
|
||||
gid: Optional[int] = None
|
||||
model: Optional[str] = None
|
||||
provider: Optional[str] = None
|
||||
ssh: bool = False
|
||||
|
||||
|
||||
class Config(BaseModel):
|
||||
|
||||
@@ -94,6 +94,8 @@ class UserConfigManager:
|
||||
"networks": [], # Default networks to connect to (besides mc-network)
|
||||
"volumes": [], # Default volumes to mount, format: "source:dest"
|
||||
"mcps": [], # Default MCP servers to connect to
|
||||
"model": "claude-3-5-sonnet-latest", # Default LLM model to use
|
||||
"provider": "anthropic", # Default LLM provider to use
|
||||
},
|
||||
"services": {
|
||||
"langfuse": {},
|
||||
|
||||
Reference in New Issue
Block a user