create basic public inference resource

This commit is contained in:
miloschwartz
2026-08-04 17:26:57 -04:00
parent 1696fc37a8
commit 149eb17b27
11 changed files with 558 additions and 145 deletions
+16 -4
View File
@@ -312,6 +312,12 @@ export default function PublicResourcesTable({
{
value: "vnc",
label: t("vncTitle")
},
{
value: "inference",
label: t(
"createInternalResourceDialogModeInference"
)
}
]}
selectedValue={
@@ -334,7 +340,11 @@ export default function PublicResourcesTable({
? resourceRow.ssl
? "HTTPS"
: "HTTP"
: resourceRow.mode?.toUpperCase()}
: resourceRow.mode === "inference"
? t(
"createInternalResourceDialogModeInference"
)
: resourceRow.mode?.toUpperCase()}
</span>
);
}
@@ -428,7 +438,7 @@ export default function PublicResourcesTable({
const resourceRow = row.original;
if (
!["http", "ssh", "rdp", "vnc"].includes(
!["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceRow.mode || ""
)
) {
@@ -894,7 +904,9 @@ function ResourceEnabledForm({
resource,
onToggleResourceEnabled
}: ResourceEnabledFormProps) {
const enabled = ["http", "ssh", "rdp", "vnc"].includes(resource.mode || "")
const enabled = ["http", "ssh", "rdp", "vnc", "inference"].includes(
resource.mode || ""
)
? !!resource.domainId && resource.enabled
: resource.enabled;
const [optimisticEnabled, setOptimisticEnabled] = useOptimistic(enabled);
@@ -912,7 +924,7 @@ function ResourceEnabledForm({
<Switch
checked={optimisticEnabled}
disabled={
(["http", "ssh", "rdp", "vnc"].includes(
(["http", "ssh", "rdp", "vnc", "inference"].includes(
resource.mode || ""
) &&
!resource.domainId) ||
+44 -30
View File
@@ -30,15 +30,21 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
const fullUrl = `${resource.ssl ? "https" : "http"}://${toUnicode(resource.fullDomain || "")}`;
const isDomainResource = [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resource.mode);
const showCertificate = !!(
["http", "ssh", "rdp", "vnc"].includes(resource.mode) &&
isDomainResource &&
resource.domainId &&
resource.fullDomain &&
build != "oss"
);
const showType = !!(
["http", "ssh", "rdp", "vnc"].includes(resource.mode) && resource.mode
);
const showType = !!(isDomainResource && resource.mode);
const showAuth = resource.mode !== "inference";
const showHealth =
!["ssh", "rdp", "vnc"].includes(resource.mode || "") &&
!!resource.health &&
@@ -47,7 +53,7 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
const numSections = [
true, // URL or Protocol
true, // Authentication or Port
showAuth || !isDomainResource, // Authentication or Port
showType,
showCertificate,
showHealth,
@@ -66,7 +72,7 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
</span>
</InfoSectionContent>
</InfoSection> */}
{["http", "ssh", "rdp", "vnc"].includes(resource.mode) ? (
{isDomainResource ? (
<>
<InfoSection>
<InfoSectionTitle>URL</InfoSectionTitle>
@@ -94,33 +100,39 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
? resource.ssl
? "HTTPS"
: "HTTP"
: resource.mode?.toUpperCase()}
: resource.mode === "inference"
? t(
"createInternalResourceDialogModeInference"
)
: resource.mode?.toUpperCase()}
</span>
</InfoSectionContent>
</InfoSection>
)}
<InfoSection>
<InfoSectionTitle>
{t("authentication")}
</InfoSectionTitle>
<InfoSectionContent>
{authInfo.password ||
authInfo.pincode ||
authInfo.sso ||
authInfo.whitelist ||
authInfo.headerAuth ? (
<div className="flex items-center space-x-2">
<ShieldCheck className="w-4 h-4 flex-shrink-0 text-green-500" />
<span>{t("protected")}</span>
</div>
) : (
<div className="flex items-center space-x-2">
<ShieldOff className="w-4 h-4 flex-shrink-0 text-yellow-500" />
<span>{t("notProtected")}</span>
</div>
)}
</InfoSectionContent>
</InfoSection>
{showAuth && (
<InfoSection>
<InfoSectionTitle>
{t("authentication")}
</InfoSectionTitle>
<InfoSectionContent>
{authInfo.password ||
authInfo.pincode ||
authInfo.sso ||
authInfo.whitelist ||
authInfo.headerAuth ? (
<div className="flex items-center space-x-2">
<ShieldCheck className="w-4 h-4 flex-shrink-0 text-green-500" />
<span>{t("protected")}</span>
</div>
) : (
<div className="flex items-center space-x-2">
<ShieldOff className="w-4 h-4 flex-shrink-0 text-yellow-500" />
<span>{t("notProtected")}</span>
</div>
)}
</InfoSectionContent>
</InfoSection>
)}
</>
) : (
<>
@@ -138,7 +150,9 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
<InfoSectionTitle>{t("port")}</InfoSectionTitle>
<InfoSectionContent>
<CopyToClipboard
text={resource.proxyPort!.toString()}
text={
resource.proxyPort?.toString() ?? ""
}
isLink={false}
/>
</InfoSectionContent>