Skip to content

Commit

Permalink
✨ feat: Add SambaNova
Browse files Browse the repository at this point in the history
  • Loading branch information
canisminor1990 committed Feb 17, 2025
1 parent fb564ab commit a9239f5
Show file tree
Hide file tree
Showing 14 changed files with 272 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/Azure/components/Avatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import { memo } from 'react';
import IconAvatar, { type IconAvatarProps } from '@/features/IconAvatar';

import { COLOR_PRIMARY, TITLE } from '../style';
import Mono from './Mono';
import Color from './Color';

export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;

const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<IconAvatar
Icon={Mono}
Icon={Color}
aria-label={TITLE}
background={background || COLOR_PRIMARY}
iconMultiple={0.7}
Expand Down
2 changes: 1 addition & 1 deletion src/Azure/style.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const TITLE = 'Azure';
export const TEXT_MULTIPLE = 0.75;
export const SPACE_MULTIPLE = 0.25;
export const COLOR_PRIMARY = '#00A4EF';
export const COLOR_PRIMARY = '#fff';
18 changes: 18 additions & 0 deletions src/SambaNova/components/Avatar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use client';

import { memo } from 'react';

import IconAvatar, { type IconAvatarProps } from '@/features/IconAvatar';

import { COLOR_PRIMARY, TITLE } from '../style';
import Mono from './Mono';

export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;

const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<IconAvatar Icon={Mono} aria-label={TITLE} background={background || COLOR_PRIMARY} {...rest} />
);
});

export default Avatar;
37 changes: 37 additions & 0 deletions src/SambaNova/components/Color.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use client';

import { forwardRef } from 'react';

import type { IconType } from '@/types';

import { TITLE } from '../style';

const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
return (
<svg
height={size}
ref={ref}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path
d="M23 23h-1.223V8.028c0-3.118-2.568-5.806-5.744-5.806H8.027c-3.176 0-5.744 2.565-5.744 5.686 0 3.119 2.568 5.684 5.744 5.684h.794c1.346 0 2.445 1.1 2.445 2.444 0 1.346-1.1 2.446-2.445 2.446H1v-1.223h7.761c.671 0 1.223-.551 1.223-1.16 0-.67-.552-1.16-1.223-1.16h-.794C4.177 14.872 1 11.756 1 7.909 1 4.058 4.176 1 8.027 1h8.066C19.88 1 23 4.239 23 8.028V23z"
fill="#EE7624"
/>
<path
d="M8.884 12.672c1.71.06 3.361 1.588 3.361 3.422 0 1.833-1.528 3.421-3.421 3.421H1v1.223h7.761c2.568 0 4.705-2.077 4.705-4.644 0-.672-.123-1.283-.43-1.894-.245-.551-.67-1.1-1.099-1.528-.489-.429-1.039-.734-1.65-.977-.525-.175-1.048-.193-1.594-.212-.218-.008-.441-.016-.669-.034-.428 0-1.406-.245-1.956-.61a3.369 3.369 0 01-1.223-1.406c-.183-.489-.305-.977-.305-1.528A3.417 3.417 0 017.96 4.482h8.066c1.895 0 3.422 1.65 3.422 3.483v15.032h1.223V8.027c0-2.568-2.077-4.768-4.645-4.768h-8c-2.568 0-4.705 2.077-4.705 4.646 0 .67.123 1.282.43 1.894a4.45 4.45 0 001.099 1.528c.429.428 1.039.734 1.588.976.306.123.611.183.976.246.857.06 1.406.123 1.466.123h.003z"
fill="#EE7624"
/>
<path
d="M1 23h7.761v-.003c3.85 0 7.03-3.116 7.09-7.026 0-3.79-3.117-6.906-6.967-6.906H8.09c-.672 0-1.222-.552-1.222-1.16 0-.608.487-1.16 1.159-1.16h8.069c.608 0 1.159.611 1.159 1.283v14.97h1.223V8.024c0-1.345-1.1-2.505-2.445-2.505H7.967a2.451 2.451 0 00-2.445 2.445 2.45 2.45 0 002.445 2.445h.794c3.176 0 5.744 2.568 5.744 5.684s-2.568 5.684-5.744 5.684H1V23z"
fill="#EE7624"
/>
</svg>
);
});

export default Icon;
30 changes: 30 additions & 0 deletions src/SambaNova/components/Combine.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'use client';

import { memo } from 'react';

import IconCombine, { type IconCombineProps } from '@/features/IconCombine';

import { SPACE_MULTIPLE, TEXT_MULTIPLE, TITLE } from '../style';
import Color from './Color';
import Mono from './Mono';
import Text from './Text';

export interface CombineProps extends Omit<IconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;

return (
<IconCombine
Icon={Icon}
Text={Text}
aria-label={TITLE}
spaceMultiple={SPACE_MULTIPLE}
textMultiple={TEXT_MULTIPLE}
{...rest}
/>
);
});

export default Combine;
30 changes: 30 additions & 0 deletions src/SambaNova/components/Mono.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'use client';

import { forwardRef } from 'react';

import type { IconType } from '@/types';

import { TITLE } from '../style';

const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
ref={ref}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M23 23h-1.223V8.028c0-3.118-2.568-5.806-5.744-5.806H8.027c-3.176 0-5.744 2.565-5.744 5.686 0 3.119 2.568 5.684 5.744 5.684h.794c1.346 0 2.445 1.1 2.445 2.444 0 1.346-1.1 2.446-2.445 2.446H1v-1.223h7.761c.671 0 1.223-.551 1.223-1.16 0-.67-.552-1.16-1.223-1.16h-.794C4.177 14.872 1 11.756 1 7.909 1 4.058 4.176 1 8.027 1h8.066C19.88 1 23 4.239 23 8.028V23z" />
<path d="M8.884 12.672c1.71.06 3.361 1.588 3.361 3.422 0 1.833-1.528 3.421-3.421 3.421H1v1.223h7.761c2.568 0 4.705-2.077 4.705-4.644 0-.672-.123-1.283-.43-1.894-.245-.551-.67-1.1-1.099-1.528-.489-.429-1.039-.734-1.65-.977-.525-.175-1.048-.193-1.594-.212-.218-.008-.441-.016-.669-.034-.428 0-1.406-.245-1.956-.61a3.369 3.369 0 01-1.223-1.406c-.183-.489-.305-.977-.305-1.528A3.417 3.417 0 017.96 4.482h8.066c1.895 0 3.422 1.65 3.422 3.483v15.032h1.223V8.027c0-2.568-2.077-4.768-4.645-4.768h-8c-2.568 0-4.705 2.077-4.705 4.646 0 .67.123 1.282.43 1.894a4.45 4.45 0 001.099 1.528c.429.428 1.039.734 1.588.976.306.123.611.183.976.246.857.06 1.406.123 1.466.123h.003z" />
<path d="M1 23h7.761v-.003c3.85 0 7.03-3.116 7.09-7.026 0-3.79-3.117-6.906-6.967-6.906H8.09c-.672 0-1.222-.552-1.222-1.16 0-.608.487-1.16 1.159-1.16h8.069c.608 0 1.159.611 1.159 1.283v14.97h1.223V8.024c0-1.345-1.1-2.505-2.445-2.505H7.967a2.451 2.451 0 00-2.445 2.445 2.45 2.45 0 002.445 2.445h.794c3.176 0 5.744 2.568 5.744 5.684s-2.568 5.684-5.744 5.684H1V23z" />
</svg>
);
});

export default Icon;
27 changes: 27 additions & 0 deletions src/SambaNova/components/Text.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use client';

import { forwardRef } from 'react';

import type { IconType } from '@/types';

import { TITLE } from '../style';

const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
ref={ref}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 175 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M11.5 5.904c0-1.92-1.232-3.066-2.977-3.066-1.488 0-2.833 1.345-2.833 2.89 0 1.546 1.003 2.349 3.066 3.005 4.582 1.46 6.27 3.18 6.27 6.846 0 3.665-2.748 6.413-6.499 6.413-3.75 0-6.47-2.691-6.527-6.67h3.095c.028 2.291 1.373 3.836 3.436 3.836 2.063 0 3.409-1.488 3.409-3.58 0-1.545-.69-2.52-2.948-3.294-5.239-1.773-6.385-3.494-6.385-6.499C2.607 2.548 5.27 0 8.536 0c3.494 0 6.013 2.206 6.07 5.9h-3.094l-.012.004zM31.433 21.596v-2.462h-.058c-1.117 1.891-3.123 2.862-5.381 2.862-4.64 0-8.42-3.494-8.42-8.077 0-5.068 3.637-8.619 8.305-8.619 2.32 0 4.265.86 5.496 2.662h.058V5.728h2.976v15.864h-2.976v.004zm.057-7.901c0-3.095-2.235-5.671-5.525-5.671-2.976 0-5.41 2.548-5.41 5.67 0 3.124 2.434 5.586 5.41 5.586s5.525-2.576 5.525-5.585zM58.908 21.596V12.72c0-3.004-1.26-4.696-3.75-4.696-2.635 0-3.78 1.46-3.78 4.64v8.932H48.4v-9.218c0-3.123-1.46-4.35-3.608-4.35-2.634 0-3.922 1.545-3.922 4.668V21.6h-2.976V5.732h2.748V7.45h.057C41.988 5.932 43.19 5.3 45.254 5.3c2.063 0 4.122 1.003 4.925 2.662 1.146-1.802 2.72-2.662 5.24-2.662 4.121 0 6.47 2.577 6.47 6.67v9.622h-2.977l-.004.004zM65.346 21.596V.408h2.976v7.53h.057c1.288-1.745 3.294-2.634 5.439-2.634 4.497 0 8.22 3.78 8.22 8.362 0 4.583-3.495 8.334-7.963 8.334-2.291 0-4.412-.917-5.728-2.69h-.057v2.29h-2.948l.004-.004zm13.715-7.93c0-3.004-2.377-5.642-5.439-5.642-3.062 0-5.381 2.576-5.381 5.585 0 3.01 2.377 5.672 5.41 5.672 3.033 0 5.41-2.52 5.41-5.615zM97.575 21.596v-2.462h-.057c-1.117 1.891-3.123 2.862-5.382 2.862-4.64 0-8.419-3.494-8.419-8.077 0-5.068 3.637-8.619 8.305-8.619 2.32 0 4.265.86 5.496 2.662h.057V5.728h2.976v15.864h-2.976v.004zm.057-7.901c0-3.095-2.234-5.671-5.524-5.671-2.977 0-5.41 2.548-5.41 5.67 0 3.124 2.434 5.586 5.41 5.586s5.524-2.576 5.524-5.585zM117.855 21.596L107.372 5.22h-.057v16.377h-3.09V.408h3.38l10.307 16.12h.057V.409h3.09v21.188h-3.208.004zM132.304 21.996c-4.469 0-8.448-3.808-8.448-8.277 0-4.84 3.808-8.419 8.676-8.419 4.383 0 8.505 3.437 8.448 8.476-.057 4.236-3.608 8.22-8.676 8.22zm.086-13.972c-2.977 0-5.558 2.52-5.558 5.614s2.492 5.642 5.496 5.642c3.005 0 5.668-2.462 5.668-5.67 0-3.21-2.492-5.586-5.611-5.586h.005zM147.41 21.596l-6.3-15.864h3.181l4.15 11.339h.057l4.065-11.339h3.18l-6.242 15.864h-2.091zM169.785 21.596v-2.462h-.057c-1.118 1.891-3.124 2.862-5.382 2.862-4.64 0-8.419-3.494-8.419-8.077 0-5.068 3.636-8.619 8.305-8.619 2.319 0 4.264.86 5.496 2.662h.057V5.728h2.976v15.864h-2.976v.004zm.057-7.901c0-3.095-2.235-5.671-5.525-5.671-2.976 0-5.41 2.548-5.41 5.67 0 3.124 2.434 5.586 5.41 5.586 2.977 0 5.525-2.576 5.525-5.585z" />
</svg>
);
});

export default Icon;
72 changes: 72 additions & 0 deletions src/SambaNova/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
nav: Components
group: Provider
title: SambaNova
atomId: SambaNova
description: https://sambanova.ai
---

## Icons

```tsx
import { SambaNova } from '@lobehub/icons';
import { Flexbox } from 'react-layout-kit';

export default () => (
<Flexbox gap={16} horizontal>
<SambaNova size={64} />
<SambaNova.Color size={64} />
</Flexbox>
);
```

## Text

```tsx
import { SambaNova } from '@lobehub/icons';

export default () => <SambaNova.Text size={48} />;
```

## Combine

```tsx
import { SambaNova } from '@lobehub/icons';
import { Flexbox } from 'react-layout-kit';

export default () => (
<Flexbox gap={16} align={'flex-start'}>
<SambaNova.Combine size={64} />
<SambaNova.Combine size={64} type={'color'} />
</Flexbox>
);
```

## Avatars

```tsx
import { SambaNova } from '@lobehub/icons';
import { Flexbox } from 'react-layout-kit';

export default () => (
<Flexbox gap={16} horizontal>
<SambaNova.Avatar size={64} />
<SambaNova.Avatar size={64} shape={'square'} />
</Flexbox>
);
```

## Colors

```tsx
import { SambaNova } from '@lobehub/icons';
import { Flexbox } from 'react-layout-kit';

import ColorPreview from '../components/ColorPreview';

export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={SambaNova.colorPrimary} />
</Flexbox>
);
```
26 changes: 26 additions & 0 deletions src/SambaNova/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'use client';

import Avatar from './components/Avatar';
import Color from './components/Color';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';

export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};

const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
4 changes: 4 additions & 0 deletions src/SambaNova/style.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export const TITLE = 'SambaNova';
export const TEXT_MULTIPLE = 0.8;
export const SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#EE7624';
2 changes: 2 additions & 0 deletions src/features/providerConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import OpenRouter from '@/OpenRouter';
import PPIO from '@/PPIO';
import Perplexity from '@/Perplexity';
import Qwen from '@/Qwen';
import SambaNova from '@/SambaNova';
import SenseNova from '@/SenseNova';
import SiliconCloud from '@/SiliconCloud';
import Spark from '@/Spark';
Expand Down Expand Up @@ -205,4 +206,5 @@ export const providerMappings: ProviderMapping[] = [
{ Icon: Jina, keywords: [ModelProvider.Jina] },
{ Icon: AzureAI, keywords: [ModelProvider.AzureAI] },
{ Icon: Volcengine, keywords: [ModelProvider.Volcengine] },
{ Icon: SambaNova, combineMultiple: 0.85, keywords: [ModelProvider.SambaNova] },
];
3 changes: 2 additions & 1 deletion src/features/providerEnum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export enum ModelProvider {
PPIO = 'ppio',
Perplexity = 'perplexity',
Qwen = 'qwen',
SambaNova = 'sambanova',
SenseNova = 'sensenova',
SiliconCloud = 'siliconcloud',
Spark = 'spark',
Expand All @@ -47,7 +48,7 @@ export enum ModelProvider {
Wenxin = 'wenxin',
XAI = 'xai',
ZeroOne = 'zeroone',
ZhiPu = 'zhipu',
ZhiPu = 'zhipu'
}

export type ModelProviderKey = Lowercase<keyof typeof ModelProvider>;
1 change: 1 addition & 0 deletions src/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ export { default as Replicate, type CompoundedIcon as ReplicateProps } from './R
export { default as Replit, type CompoundedIcon as ReplitProps } from './Replit';
export { default as Runway, type CompoundedIcon as RunwayProps } from './Runway';
export { default as Rwkv, type CompoundedIcon as RwkvProps } from './Rwkv';
export { default as SambaNova, type CompoundedIcon as SambaNovaProps } from './SambaNova';
export { default as SenseNova, type CompoundedIcon as SenseNovaProps } from './SenseNova';
export { default as SiliconCloud, type CompoundedIcon as SiliconCloudProps } from './SiliconCloud';
export { default as Spark, type CompoundedIcon as SparkProps } from './Spark';
Expand Down
21 changes: 20 additions & 1 deletion src/toc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ const toc: IconToc[] = [
title: 'Aya',
},
{
color: '#00A4EF',
color: '#fff',
desc: 'https://azure.microsoft.com',
docsUrl: 'azure',
fullTitle: 'Microsoft Azure',
Expand Down Expand Up @@ -2019,6 +2019,25 @@ const toc: IconToc[] = [
},
title: 'RWKV',
},
{
color: '#EE7624',
desc: 'https://sambanova.ai',
docsUrl: 'samba-nova',
fullTitle: 'SambaNova',
group: 'provider',
id: 'SambaNova',
param: {
hasAvatar: true,
hasBrand: false,
hasBrandColor: false,
hasColor: true,
hasCombine: true,
hasText: true,
hasTextCn: false,
hasTextColor: false,
},
title: 'SambaNova',
},
{
color: '#5B2AD8',
desc: 'https://platform.sensenova.cn',
Expand Down

0 comments on commit a9239f5

Please sign in to comment.