mirror of
https://github.com/geoffsee/open-gsio.git
synced 2025-09-08 22:56:46 +00:00
Remove unused ResumeComponent
, ServicesComponent
, and related sections. Update theming for SupportThisSiteModal
, adjust DogecoinIcon
, and refine Cloudflare worker references.
This commit is contained in:
@@ -15,7 +15,7 @@
|
|||||||
"server:dev": "bun build:client && (cd packages/server && bun run dev)",
|
"server:dev": "bun build:client && (cd packages/server && bun run dev)",
|
||||||
"build": "(cd packages/cloudflare-workers/open-gsio && bun run deploy:dry-run)",
|
"build": "(cd packages/cloudflare-workers/open-gsio && bun run deploy:dry-run)",
|
||||||
"build:client": "(cd packages/client && bun run vite build)",
|
"build:client": "(cd packages/client && bun run vite build)",
|
||||||
"deploy": "(cd packages/cloudflare-workers && bun run deploy)",
|
"deploy": "(cd packages/cloudflare-workers/open-gsio && bun run deploy)",
|
||||||
"deploy:secrets": "wrangler secret bulk secrets.json -c packages/cloudflare-workers/open-gsio/wrangler.jsonc",
|
"deploy:secrets": "wrangler secret bulk secrets.json -c packages/cloudflare-workers/open-gsio/wrangler.jsonc",
|
||||||
"openai:local:mlx": "packages/scripts/start_inference_server.sh mlx-omni-server",
|
"openai:local:mlx": "packages/scripts/start_inference_server.sh mlx-omni-server",
|
||||||
"openai:local:ollama": "packages/scripts/start_inference_server.sh ollama",
|
"openai:local:ollama": "packages/scripts/start_inference_server.sh ollama",
|
||||||
|
@@ -6,6 +6,7 @@ const TealDogecoinIcon = (props) => (
|
|||||||
as="svg"
|
as="svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
|
stroke={"currentColor"}
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
boxSize={props.boxSize || "1em"}
|
boxSize={props.boxSize || "1em"}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -26,8 +27,8 @@ const TealDogecoinIcon = (props) => (
|
|||||||
fill-rule="evenodd"
|
fill-rule="evenodd"
|
||||||
clip-rule="evenodd"
|
clip-rule="evenodd"
|
||||||
d="M17.5001 9.54053C16.4888 6.92891 13.9888 6.44507 13.9888 6.44507H6.85606L6.88358 9.10523H8.30406V15.0454H6.85596V17.7007H13.7913C15.4628 17.7007 16.8026 16.0211 16.8026 16.0211C18.9482 12.9758 17.5 9.54053 17.5 9.54053H17.5001ZM13.8285 14.2314C13.8285 14.2314 13.2845 15.0163 12.6927 15.0163H11.5087L11.4806 9.11173H13.0001C13.0001 9.11173 13.7041 9.25894 14.1959 10.6521C14.1959 10.6521 14.848 12.6468 13.8285 14.2314Z"
|
d="M17.5001 9.54053C16.4888 6.92891 13.9888 6.44507 13.9888 6.44507H6.85606L6.88358 9.10523H8.30406V15.0454H6.85596V17.7007H13.7913C15.4628 17.7007 16.8026 16.0211 16.8026 16.0211C18.9482 12.9758 17.5 9.54053 17.5 9.54053H17.5001ZM13.8285 14.2314C13.8285 14.2314 13.2845 15.0163 12.6927 15.0163H11.5087L11.4806 9.11173H13.0001C13.0001 9.11173 13.7041 9.25894 14.1959 10.6521C14.1959 10.6521 14.848 12.6468 13.8285 14.2314Z"
|
||||||
fill="white"
|
// fill="white"
|
||||||
fill-opacity="0.8"
|
// fill-opacity="0.8"
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
import React, { useCallback, useMemo } from "react";
|
|
||||||
import { Box, Flex, useMediaQuery } from "@chakra-ui/react";
|
|
||||||
import { resumeData } from "../../static-data/resume_data";
|
|
||||||
import SectionContent from "./SectionContent";
|
|
||||||
import SectionButton from "./SectionButton";
|
|
||||||
|
|
||||||
const sections = ["professionalSummary", "skills", "experience", "education"];
|
|
||||||
|
|
||||||
export default function ResumeComponent() {
|
|
||||||
const [activeSection, setActiveSection] = React.useState(
|
|
||||||
"professionalSummary",
|
|
||||||
);
|
|
||||||
const [isMobile] = useMediaQuery("(max-width: 1243px)");
|
|
||||||
|
|
||||||
const handleSectionClick = useCallback((section) => {
|
|
||||||
setActiveSection(section);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const capitalizeFirstLetter = useCallback((word) => {
|
|
||||||
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const sectionButtons = useMemo(
|
|
||||||
() =>
|
|
||||||
sections.map((section) => (
|
|
||||||
<SectionButton
|
|
||||||
key={section}
|
|
||||||
onClick={() => handleSectionClick(section)}
|
|
||||||
activeSection={activeSection}
|
|
||||||
section={section}
|
|
||||||
mobile={isMobile}
|
|
||||||
callbackfn={capitalizeFirstLetter}
|
|
||||||
/>
|
|
||||||
)),
|
|
||||||
[activeSection, isMobile, handleSectionClick, capitalizeFirstLetter],
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box p={"unset"}>
|
|
||||||
<Flex
|
|
||||||
direction={isMobile ? "column" : "row"}
|
|
||||||
mb={8}
|
|
||||||
wrap="nowrap"
|
|
||||||
gap={isMobile ? 2 : 4}
|
|
||||||
minWidth="0"
|
|
||||||
>
|
|
||||||
{sectionButtons}
|
|
||||||
</Flex>
|
|
||||||
<Box
|
|
||||||
bg="background.secondary"
|
|
||||||
color="text.primary"
|
|
||||||
borderRadius="md"
|
|
||||||
boxShadow="md"
|
|
||||||
borderWidth={1}
|
|
||||||
borderColor="brand.300"
|
|
||||||
minHeight="300px"
|
|
||||||
>
|
|
||||||
<SectionContent activeSection={activeSection} resumeData={resumeData} />
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
}
|
|
@@ -1,32 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { Button } from "@chakra-ui/react";
|
|
||||||
import { ChevronRight } from "lucide-react";
|
|
||||||
|
|
||||||
function SectionButton(props: {
|
|
||||||
onClick: () => void;
|
|
||||||
activeSection: string;
|
|
||||||
section: string;
|
|
||||||
mobile: boolean;
|
|
||||||
callbackfn: (word) => string;
|
|
||||||
}) {
|
|
||||||
return (
|
|
||||||
<Button
|
|
||||||
mt={1}
|
|
||||||
onClick={props.onClick}
|
|
||||||
variant={props.activeSection === props.section ? "solid" : "outline"}
|
|
||||||
colorScheme="brand"
|
|
||||||
rightIcon={<ChevronRight size={16} />}
|
|
||||||
size="md"
|
|
||||||
width={props.mobile ? "100%" : "auto"}
|
|
||||||
>
|
|
||||||
{props.section
|
|
||||||
.replace(/([A-Z])/g, " $1")
|
|
||||||
.trim()
|
|
||||||
.split(" ")
|
|
||||||
.map(props.callbackfn)
|
|
||||||
.join(" ")}
|
|
||||||
</Button>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default SectionButton;
|
|
@@ -1,98 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import {
|
|
||||||
Box,
|
|
||||||
Grid,
|
|
||||||
GridItem,
|
|
||||||
Heading,
|
|
||||||
ListItem,
|
|
||||||
Text,
|
|
||||||
UnorderedList,
|
|
||||||
VStack,
|
|
||||||
} from "@chakra-ui/react";
|
|
||||||
|
|
||||||
const fontSize = "md";
|
|
||||||
|
|
||||||
const ProfessionalSummary = ({ professionalSummary }) => (
|
|
||||||
<Box>
|
|
||||||
<Grid
|
|
||||||
templateColumns="1fr"
|
|
||||||
gap={4}
|
|
||||||
maxW={["100%", "100%", "100%"]}
|
|
||||||
mx="auto"
|
|
||||||
className="about-container"
|
|
||||||
>
|
|
||||||
<GridItem
|
|
||||||
colSpan={1}
|
|
||||||
maxW={["100%", "100%", "container.md"]}
|
|
||||||
justifySelf="center"
|
|
||||||
minH={"100%"}
|
|
||||||
>
|
|
||||||
<Grid templateColumns="1fr" gap={4} overflowY={"auto"}>
|
|
||||||
<GridItem>
|
|
||||||
<Text fontSize="md">{professionalSummary}</Text>
|
|
||||||
</GridItem>
|
|
||||||
</Grid>
|
|
||||||
</GridItem>
|
|
||||||
</Grid>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
|
|
||||||
const Skills = ({ skills }) => (
|
|
||||||
<VStack align={"baseline"} spacing={6} mb={4}>
|
|
||||||
<UnorderedList spacing={2} mb={0}>
|
|
||||||
<Box>
|
|
||||||
{skills?.map((skill, index) => (
|
|
||||||
<ListItem p={1} key={index}>
|
|
||||||
{skill}
|
|
||||||
</ListItem>
|
|
||||||
))}
|
|
||||||
</Box>
|
|
||||||
</UnorderedList>
|
|
||||||
</VStack>
|
|
||||||
);
|
|
||||||
|
|
||||||
const Experience = ({ experience }) => (
|
|
||||||
<VStack align="start" spacing={6} mb={4}>
|
|
||||||
{experience?.map((job, index) => (
|
|
||||||
<Box key={index} width="100%">
|
|
||||||
<Heading as="h3" size="md" mb={2}>
|
|
||||||
{job.title}
|
|
||||||
</Heading>
|
|
||||||
<Text fontWeight="bold">{job.company}</Text>
|
|
||||||
<Text color="gray.500" mb={2}>
|
|
||||||
{job.timeline}
|
|
||||||
</Text>
|
|
||||||
<Text>{job.description}</Text>
|
|
||||||
</Box>
|
|
||||||
))}
|
|
||||||
</VStack>
|
|
||||||
);
|
|
||||||
|
|
||||||
const Education = ({ education }) => (
|
|
||||||
<UnorderedList spacing={2} mb={4}>
|
|
||||||
{education?.map((edu, index) => <ListItem key={index}>{edu}</ListItem>)}
|
|
||||||
</UnorderedList>
|
|
||||||
);
|
|
||||||
|
|
||||||
const SectionContent = ({ activeSection, resumeData }) => {
|
|
||||||
const components = {
|
|
||||||
professionalSummary: ProfessionalSummary,
|
|
||||||
skills: Skills,
|
|
||||||
experience: Experience,
|
|
||||||
education: Education,
|
|
||||||
};
|
|
||||||
|
|
||||||
const ActiveComponent = components[activeSection];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box p={4} minHeight="300px" width="100%">
|
|
||||||
{ActiveComponent ? (
|
|
||||||
<ActiveComponent {...resumeData} />
|
|
||||||
) : (
|
|
||||||
<Text>Select a section to view details.</Text>
|
|
||||||
)}
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SectionContent;
|
|
@@ -1,64 +0,0 @@
|
|||||||
// ServicesComponent.js
|
|
||||||
import React, { useCallback, useMemo } from "react";
|
|
||||||
import { Box, Flex, useMediaQuery } from "@chakra-ui/react";
|
|
||||||
import { servicesData } from "../../static-data/services_data";
|
|
||||||
import SectionButton from "../resume/SectionButton";
|
|
||||||
import ServicesSectionContent from "./ServicesComponentSection";
|
|
||||||
|
|
||||||
const sections = ["servicesOverview", "offerings"];
|
|
||||||
|
|
||||||
export default function ServicesComponent() {
|
|
||||||
const [activeSection, setActiveSection] = React.useState("servicesOverview");
|
|
||||||
const [isMobile] = useMediaQuery("(max-width: 1243px)");
|
|
||||||
|
|
||||||
const handleSectionClick = useCallback((section) => {
|
|
||||||
setActiveSection(section);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const capitalizeFirstLetter = useCallback((word) => {
|
|
||||||
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const sectionButtons = useMemo(
|
|
||||||
() =>
|
|
||||||
sections.map((section) => (
|
|
||||||
<SectionButton
|
|
||||||
key={section}
|
|
||||||
onClick={() => handleSectionClick(section)}
|
|
||||||
activeSection={activeSection}
|
|
||||||
section={section}
|
|
||||||
mobile={isMobile}
|
|
||||||
callbackfn={capitalizeFirstLetter}
|
|
||||||
/>
|
|
||||||
)),
|
|
||||||
[activeSection, isMobile, handleSectionClick, capitalizeFirstLetter],
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box p={"unset"}>
|
|
||||||
<Flex
|
|
||||||
direction={isMobile ? "column" : "row"}
|
|
||||||
mb={8}
|
|
||||||
wrap="nowrap"
|
|
||||||
gap={isMobile ? 2 : 4}
|
|
||||||
minWidth="0" // Ensures flex items can shrink if needed
|
|
||||||
>
|
|
||||||
{sectionButtons}
|
|
||||||
</Flex>
|
|
||||||
<Box
|
|
||||||
bg="background.secondary"
|
|
||||||
color="text.primary"
|
|
||||||
borderRadius="md"
|
|
||||||
boxShadow="md"
|
|
||||||
borderWidth={1}
|
|
||||||
borderColor="brand.300"
|
|
||||||
minHeight="300px"
|
|
||||||
>
|
|
||||||
<ServicesSectionContent
|
|
||||||
activeSection={activeSection}
|
|
||||||
data={servicesData}
|
|
||||||
/>
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { Box, Heading, Text, VStack } from "@chakra-ui/react";
|
|
||||||
|
|
||||||
const ServicesOverview = ({ servicesOverview }) => (
|
|
||||||
<Text fontSize="md">{servicesOverview}</Text>
|
|
||||||
);
|
|
||||||
|
|
||||||
const Offerings = ({ offerings }) => (
|
|
||||||
<VStack align="start" spacing={6} mb={4}>
|
|
||||||
{offerings.map((service, index) => (
|
|
||||||
<Box key={index}>
|
|
||||||
<Heading as="h3" size="md" mb={2}>
|
|
||||||
{service.title}
|
|
||||||
</Heading>
|
|
||||||
<Text mb={4}>{service.description}</Text>
|
|
||||||
</Box>
|
|
||||||
))}
|
|
||||||
</VStack>
|
|
||||||
);
|
|
||||||
|
|
||||||
const ServicesSectionContent = ({ activeSection, data }) => {
|
|
||||||
const components = {
|
|
||||||
servicesOverview: ServicesOverview,
|
|
||||||
offerings: Offerings,
|
|
||||||
};
|
|
||||||
|
|
||||||
const ActiveComponent = components[activeSection];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box p={4} minHeight="300px" width="100%">
|
|
||||||
{ActiveComponent ? (
|
|
||||||
<ActiveComponent {...data} />
|
|
||||||
) : (
|
|
||||||
<Text>Select a section to view details.</Text>
|
|
||||||
)}
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ServicesSectionContent;
|
|
@@ -89,8 +89,11 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
motionPreset="slideInBottom"
|
motionPreset="slideInBottom"
|
||||||
zIndex={zIndex}
|
zIndex={zIndex}
|
||||||
>
|
>
|
||||||
<ModalOverlay />
|
<ModalOverlay
|
||||||
<ModalContent bg="gray.800" color="text.primary">
|
bg='bg.primary'
|
||||||
|
backdropFilter='blur(10px) hue-rotate(90deg)'
|
||||||
|
/>
|
||||||
|
<ModalContent bg="bg.primary" color="text.primary" >
|
||||||
<ModalHeader textAlign="center" mb={2}>
|
<ModalHeader textAlign="center" mb={2}>
|
||||||
Support
|
Support
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
@@ -103,7 +106,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
<Tabs
|
<Tabs
|
||||||
align="center"
|
align="center"
|
||||||
variant="soft-rounded"
|
variant="soft-rounded"
|
||||||
colorScheme="teal"
|
// colorScheme="teal"
|
||||||
isFitted
|
isFitted
|
||||||
>
|
>
|
||||||
<TabList mb={2} w={"20%"}>
|
<TabList mb={2} w={"20%"}>
|
||||||
@@ -111,11 +114,13 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
<Tab
|
<Tab
|
||||||
p={4}
|
p={4}
|
||||||
key={method.name}
|
key={method.name}
|
||||||
|
color={"text.primary"}
|
||||||
|
bg={clientTransactionStore.selectedMethod=== method.name ? "bg.primary": "bg.secondary"}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
clientTransactionStore.setSelectedMethod(method.name);
|
clientTransactionStore.setSelectedMethod(method.name);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box p={1} w={"fit-content"}>
|
<Box p={1} w={"fit-content"} >
|
||||||
<method.icon />{" "}
|
<method.icon />{" "}
|
||||||
</Box>
|
</Box>
|
||||||
{method.name}
|
{method.name}
|
||||||
@@ -137,8 +142,8 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
clientTransactionStore.setDonerId(e.target.value)
|
clientTransactionStore.setDonerId(e.target.value)
|
||||||
}
|
}
|
||||||
type="text"
|
type="text"
|
||||||
bg="gray.700"
|
bg="bg.secondary"
|
||||||
color="white"
|
color="text.primary"
|
||||||
w="100%"
|
w="100%"
|
||||||
/>
|
/>
|
||||||
<Text>Enter the amount you wish to donate:</Text>
|
<Text>Enter the amount you wish to donate:</Text>
|
||||||
@@ -151,14 +156,14 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
clientTransactionStore.setAmount(e.target.value)
|
clientTransactionStore.setAmount(e.target.value)
|
||||||
}
|
}
|
||||||
type="number"
|
type="number"
|
||||||
bg="gray.700"
|
bg="bg.secondary"
|
||||||
color="white"
|
// color="white"
|
||||||
w="100%"
|
w="100%"
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
onClick={handleConfirmAmount}
|
onClick={handleConfirmAmount}
|
||||||
size="md"
|
size="md"
|
||||||
colorScheme="teal"
|
// colorScheme="teal"
|
||||||
>
|
>
|
||||||
Confirm Amount
|
Confirm Amount
|
||||||
</Button>
|
</Button>
|
||||||
@@ -181,7 +186,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<Box
|
<Box
|
||||||
bg="gray.700"
|
bg="bg.secondary"
|
||||||
p={4}
|
p={4}
|
||||||
borderRadius="md"
|
borderRadius="md"
|
||||||
wordBreak="unset"
|
wordBreak="unset"
|
||||||
@@ -196,7 +201,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
<Button
|
<Button
|
||||||
onClick={handleCopy}
|
onClick={handleCopy}
|
||||||
size="md"
|
size="md"
|
||||||
colorScheme="teal"
|
// colorScheme="teal"
|
||||||
mb={4}
|
mb={4}
|
||||||
>
|
>
|
||||||
{hasCopied ? "Address Copied!" : "Copy Address"}
|
{hasCopied ? "Address Copied!" : "Copy Address"}
|
||||||
@@ -213,7 +218,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
|||||||
</VStack>
|
</VStack>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<Button variant="outline" mr={3} onClick={onClose} colorScheme="gray">
|
<Button variant="outline" mr={3} onClick={onClose} >
|
||||||
Close
|
Close
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import Server from "@open-gsio/server";
|
import Server from "@open-gsio/server";
|
||||||
import ServerCoordinator from "packages/server/durable-objects/ServerCoordinator";
|
import ServerCoordinator from "@open-gsio/server/durable-objects/ServerCoordinator";
|
||||||
|
|
||||||
export {ServerCoordinator}
|
export {ServerCoordinator}
|
||||||
|
|
||||||
|
@@ -11,6 +11,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cloudflare/vite-plugin": "^1.3.1",
|
"@cloudflare/vite-plugin": "^1.3.1",
|
||||||
"vite": "6.3.5",
|
"vite": "6.3.5",
|
||||||
"wrangler": "^4.18.0"
|
"wrangler": "^4.18.0",
|
||||||
|
"@open-gsio/server": "workspace:*",
|
||||||
|
"@open-gsio/client": "workspace:*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
"migrations": [
|
"migrations": [
|
||||||
{
|
{
|
||||||
"new_classes": [
|
"new_classes": [
|
||||||
"SiteCoordinator"
|
"ServerCoordinator"
|
||||||
],
|
],
|
||||||
"tag": "v1"
|
"tag": "v1"
|
||||||
}
|
}
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"OPENAI_API_KEY": "",
|
"OPENAI_API_KEY": "",
|
||||||
"OPENAI_API_ENDPOINT": "",
|
"OPENAI_API_ENDPOINT": "",
|
||||||
"PERIGON_API_KEY": "",
|
|
||||||
"EVENTSOURCE_HOST": "",
|
|
||||||
"GROQ_API_KEY": "",
|
"GROQ_API_KEY": "",
|
||||||
"ANTHROPIC_API_KEY": "",
|
"ANTHROPIC_API_KEY": "",
|
||||||
"FIREWORKS_API_KEY": "",
|
"FIREWORKS_API_KEY": "",
|
||||||
"GEMINI_API_KEY": "",
|
"GEMINI_API_KEY": "",
|
||||||
"XAI_API_KEY": "",
|
"XAI_API_KEY": "",
|
||||||
"CEREBRAS_API_KEY": ""
|
"CEREBRAS_API_KEY": "",
|
||||||
}
|
"CLOUDFLARE_API_KEY": "",
|
||||||
|
"CLOUDFLARE_ACCOUNT_ID": ""
|
||||||
|
}
|
Reference in New Issue
Block a user