cloud: added openrouter integration with global configs

This commit is contained in:
DESKTOP-RTLN3BA\$punk 2026-04-15 23:46:29 -07:00
parent ff4e0f9b62
commit 4a51ccdc2c
26 changed files with 911 additions and 178 deletions

View file

@ -222,7 +222,10 @@ export const FreeComposer: FC = () => {
<Tooltip>
<TooltipTrigger asChild>
<label htmlFor="free-web-search-toggle" className="flex items-center gap-1.5 cursor-pointer select-none rounded-md px-2 py-1 text-xs text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors">
<label
htmlFor="free-web-search-toggle"
className="flex items-center gap-1.5 cursor-pointer select-none rounded-md px-2 py-1 text-xs text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors"
>
<Globe className="size-3.5" />
<span className="hidden sm:inline">Web</span>
<Switch

View file

@ -40,16 +40,21 @@ export function FreeModelSelector({ className }: { className?: string }) {
[models, currentSlug]
);
const sortedModels = useMemo(
() => [...models].sort((a, b) => Number(a.is_premium) - Number(b.is_premium)),
[models]
);
const filteredModels = useMemo(() => {
if (!searchQuery.trim()) return models;
if (!searchQuery.trim()) return sortedModels;
const q = searchQuery.toLowerCase();
return models.filter(
return sortedModels.filter(
(m) =>
m.name.toLowerCase().includes(q) ||
m.model_name.toLowerCase().includes(q) ||
m.provider.toLowerCase().includes(q)
);
}, [models, searchQuery]);
}, [sortedModels, searchQuery]);
const handleSelect = useCallback(
(model: AnonModel) => {
@ -170,13 +175,20 @@ export function FreeModelSelector({ className }: { className?: string }) {
<div className="flex-1 min-w-0">
<div className="flex items-center gap-1.5">
<span className="font-medium text-sm truncate">{model.name}</span>
{model.is_premium && (
{model.is_premium ? (
<Badge
variant="secondary"
className="text-[9px] px-1 py-0 h-3.5 bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 border-0"
>
Premium
</Badge>
) : (
<Badge
variant="secondary"
className="text-[9px] px-1 py-0 h-3.5 bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300 border-0"
>
Free
</Badge>
)}
</div>
<span className="text-xs text-muted-foreground truncate block">

View file

@ -40,7 +40,7 @@ export function QuotaWarningBanner({
</p>
<p className="text-xs text-red-600 dark:text-red-300">
You&apos;ve used all {limit.toLocaleString()} free tokens. Create a free account to
get 5 million tokens and access to all models.
get 3 million tokens and access to all models.
</p>
<Link
href="/register"