"use client"; import { useState } from "react"; import PropTypes from "prop-types"; import { Button } from "@/shared/components"; function PassthroughModelRow({ modelId, fullModel, copied, onCopy, onDeleteAlias, onTest, testStatus, isTesting }) { const borderColor = testStatus === "ok" ? "border-green-500/40" : testStatus === "error" ? "border-red-500/40" : "border-border"; const iconColor = testStatus === "ok" ? "#22c55e" : testStatus === "error" ? "#ef4444" : undefined; return (
{testStatus === "ok" ? "check_circle" : testStatus === "error" ? "cancel" : "smart_toy"}

{modelId}

{fullModel}
{copied === `model-${modelId}` ? "Copied!" : "Copy"}
{onTest && (
{isTesting ? "Testing..." : "Test"}
)}
{/* Delete button */}
); } PassthroughModelRow.propTypes = { modelId: PropTypes.string.isRequired, fullModel: PropTypes.string.isRequired, copied: PropTypes.string, onCopy: PropTypes.func.isRequired, onDeleteAlias: PropTypes.func.isRequired, onTest: PropTypes.func, testStatus: PropTypes.oneOf(["ok", "error"]), isTesting: PropTypes.bool, }; export default function PassthroughModelsSection({ providerAlias, modelAliases, copied, onCopy, onSetAlias, onDeleteAlias }) { const [newModel, setNewModel] = useState(""); const [adding, setAdding] = useState(false); // Filter aliases for this provider - models are persisted via alias const providerAliases = Object.entries(modelAliases).filter( ([, model]) => model.startsWith(`${providerAlias}/`) ); const allModels = providerAliases.map(([alias, fullModel]) => ({ modelId: fullModel.replace(`${providerAlias}/`, ""), fullModel, alias, })); // Generate default alias from modelId (last part after /) const generateDefaultAlias = (modelId) => { const parts = modelId.split("/"); return parts[parts.length - 1]; }; const handleAdd = async () => { if (!newModel.trim() || adding) return; const modelId = newModel.trim(); const defaultAlias = generateDefaultAlias(modelId); // Check if alias already exists if (modelAliases[defaultAlias]) { alert(`Alias "${defaultAlias}" already exists. Please use a different model or edit existing alias.`); return; } setAdding(true); try { await onSetAlias(modelId, defaultAlias); setNewModel(""); } catch (error) { console.log("Error adding model:", error); } finally { setAdding(false); } }; return (

OpenRouter supports any model. Add models and create aliases for quick access.

{/* Add new model */}
setNewModel(e.target.value)} onKeyDown={(e) => e.key === "Enter" && handleAdd()} placeholder="anthropic/claude-3-opus" className="w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary" />
{/* Models list */} {allModels.length > 0 && (
{allModels.map(({ modelId, fullModel, alias }) => ( onDeleteAlias(alias)} /> ))}
)}
); } PassthroughModelsSection.propTypes = { providerAlias: PropTypes.string.isRequired, modelAliases: PropTypes.object.isRequired, copied: PropTypes.string, onCopy: PropTypes.func.isRequired, onSetAlias: PropTypes.func.isRequired, onDeleteAlias: PropTypes.func.isRequired, };