migrate fern
BIN
fern/assets/banner_blue_small.webp
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
fern/assets/banner_orange_small.webp
Normal file
|
After Width: | Height: | Size: 153 KiB |
BIN
fern/assets/favicon.png
Normal file
|
After Width: | Height: | Size: 342 B |
BIN
fern/assets/fonts/fira-code/FiraCode-Medium.ttf
Normal file
BIN
fern/assets/fonts/fira-code/FiraCode-Regular.ttf
Normal file
BIN
fern/assets/fonts/manrope/Manrope-Medium.ttf
Normal file
BIN
fern/assets/fonts/manrope/Manrope-Regular.ttf
Normal file
BIN
fern/assets/fonts/roobert/RoobertMedium.woff2
Normal file
145
fern/assets/leaderboard.css
Normal file
@@ -0,0 +1,145 @@
|
||||
/* ────────────────────────────────────────────────────────────────
|
||||
assets/leaderboard.css (namespaced so it never leaks styles)
|
||||
──────────────────────────────────────────────────────────────── */
|
||||
|
||||
/* hide rows that don’t match search */
|
||||
#letta-leaderboard tr.hidden { display: none !important; }
|
||||
|
||||
/* clickable, sortable headers */
|
||||
#letta-leaderboard thead th[data-key] {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
position: relative;
|
||||
}
|
||||
#letta-leaderboard thead th.asc::after,
|
||||
#letta-leaderboard thead th.desc::after {
|
||||
position: absolute;
|
||||
right: 6px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 10px;
|
||||
line-height: 1;
|
||||
}
|
||||
#letta-leaderboard thead th.asc::after { content: "▲"; }
|
||||
#letta-leaderboard thead th.desc::after { content: "▼"; }
|
||||
|
||||
/* bar-chart cells */
|
||||
#letta-leaderboard .bar-cell {
|
||||
position: relative;
|
||||
padding: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
#letta-leaderboard .bar-viz {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
height: 36px;
|
||||
z-index: 1;
|
||||
max-width: 100%;
|
||||
border-radius: 0;
|
||||
}
|
||||
#letta-leaderboard .bar-cell span.value {
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
padding: 0 4px;
|
||||
font-size: 14px;
|
||||
z-index: 2;
|
||||
border-radius: 0;
|
||||
}
|
||||
#letta-leaderboard .bar-cell span.warn {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 15px;
|
||||
line-height: 1;
|
||||
color: #dc3545;
|
||||
cursor: help;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
/* bar colours */
|
||||
#letta-leaderboard .avg .bar-viz { background: rgba(40, 167, 69, 0.35); } /* green */
|
||||
#letta-leaderboard .cost-ok .bar-viz { background: rgba(255, 193, 7, 0.35); } /* amber */
|
||||
#letta-leaderboard .cost-high .bar-viz { background: rgba(220, 53, 69, 0.35); } /* red */
|
||||
|
||||
/* faint ruler + right border */
|
||||
#letta-leaderboard .bar-cell::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 8px;
|
||||
transform: translateY(-50%);
|
||||
pointer-events: none;
|
||||
background: repeating-linear-gradient(
|
||||
90deg,
|
||||
rgba(170, 170, 170, 0.5) 0 1px,
|
||||
transparent 1px 25%
|
||||
);
|
||||
}
|
||||
#letta-leaderboard .bar-cell::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 0;
|
||||
width: 1px;
|
||||
height: 8px;
|
||||
background: rgba(170, 170, 170, 0.5);
|
||||
transform: translateY(-50%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* table layout tweaks */
|
||||
#letta-leaderboard tbody tr { height: 50px; }
|
||||
#letta-leaderboard .metric { width: 32%; }
|
||||
#letta-leaderboard table { table-layout: fixed; }
|
||||
|
||||
/* search box */
|
||||
#letta-leaderboard #lb-search,
|
||||
#letta-leaderboard #lb-search:focus {
|
||||
border-radius: 0 !important;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* ───────────────────────────────
|
||||
Dark-mode overrides
|
||||
(everything else inherits)
|
||||
───────────────────────────────*/
|
||||
:is(.dark) #letta-leaderboard {
|
||||
|
||||
/* 1. Bar-fill colours — a hair brighter & less transparent */
|
||||
.avg .bar-viz { background: rgba(56, 189, 98 , .55); } /* green */
|
||||
.cost-ok .bar-viz { background: rgba(255, 213, 90 , .55); } /* amber */
|
||||
.cost-high .bar-viz { background: rgba(255, 99 ,132 , .55); } /* red */
|
||||
|
||||
/* 2. Ruler + right-edge -- subtle light lines instead of grey */
|
||||
.bar-cell::before {
|
||||
background: repeating-linear-gradient(
|
||||
90deg,
|
||||
rgba(255,255,255,.12) 0 1px,
|
||||
transparent 1px 25%
|
||||
);
|
||||
}
|
||||
.bar-cell::after { background: rgba(255,255,255,.12); }
|
||||
|
||||
/* 3. Value pill – dark background so it doesn’t glow */
|
||||
.bar-cell span.value {
|
||||
background: rgba(0,0,0,.65);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* 4. Header text & sort glyphs – lighten slightly */
|
||||
thead th { color:#e2e2e2; }
|
||||
thead th::after { color:#e2e2e2; }
|
||||
}
|
||||
|
||||
/* 5. Header row background */
|
||||
:is(.dark) #letta-leaderboard thead {
|
||||
background:#1a1a1a !important; /* pick any dark tone */
|
||||
}
|
||||
153
fern/assets/leaderboard.js
Normal file
@@ -0,0 +1,153 @@
|
||||
/* ──────────────────────────────────────────────────────────
|
||||
assets/leaderboard.js
|
||||
Load via docs.yml → js: - path: assets/leaderboard.js
|
||||
(strategy: lazyOnload is fine)
|
||||
────────────────────────────────────────────────────────── */
|
||||
|
||||
import yaml from 'https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/+esm';
|
||||
|
||||
console.log('🏁 leaderboard.js loaded on', location.pathname);
|
||||
|
||||
const COST_CAP = 20;
|
||||
|
||||
/* ---------- helpers ---------- */
|
||||
const pct = (v) => Number(v).toPrecision(3) + '%';
|
||||
const cost = (v) => '$' + Number(v).toFixed(2);
|
||||
const ready = (cb) =>
|
||||
document.readyState === 'loading'
|
||||
? document.addEventListener('DOMContentLoaded', cb)
|
||||
: cb();
|
||||
|
||||
/* ---------- main ---------- */
|
||||
ready(async () => {
|
||||
// const host = document.getElementById('letta-leaderboard');
|
||||
// if (!host) {
|
||||
// console.warn('LB-script: #letta-leaderboard not found - bailing out.');
|
||||
// return;
|
||||
// }
|
||||
/* ---- wait for the leaderboard container to appear (SPA nav safe) ---- */
|
||||
const host = await new Promise((resolve, reject) => {
|
||||
const el = document.getElementById('letta-leaderboard');
|
||||
if (el) return resolve(el); // SSR / hard refresh path
|
||||
|
||||
const obs = new MutationObserver(() => {
|
||||
const found = document.getElementById('letta-leaderboard');
|
||||
if (found) {
|
||||
obs.disconnect();
|
||||
resolve(found); // CSR navigation path
|
||||
}
|
||||
});
|
||||
obs.observe(document.body, { childList: true, subtree: true });
|
||||
|
||||
setTimeout(() => {
|
||||
obs.disconnect();
|
||||
reject(new Error('#letta-leaderboard never appeared'));
|
||||
}, 5000); // safety timeout
|
||||
}).catch((err) => {
|
||||
console.warn('LB-script:', err.message);
|
||||
return null;
|
||||
});
|
||||
if (!host) return; // still no luck → give up
|
||||
|
||||
/* ----- figure out URL of data.yaml ----- */
|
||||
// const path = location.pathname.endsWith('/')
|
||||
// ? location.pathname
|
||||
// : location.pathname.replace(/[^/]*$/, ''); // strip file/slug
|
||||
// const dataUrl = `${location.origin}${path}data.yaml`;
|
||||
// const dataUrl = `${location.origin}/leaderboard/data.yaml`; // one-liner, always right
|
||||
// const dataUrl = `${location.origin}/assets/leaderboard.yaml`;
|
||||
// const dataUrl = `./assets/leaderboard.yaml`; // one-liner, always right
|
||||
// const dataUrl = `${location.origin}/data.yaml`; // one-liner, always right
|
||||
// const dataUrl = 'https://raw.githubusercontent.com/letta-ai/letta-leaderboard/main/data/letta_memory_leaderboard.yaml';
|
||||
const dataUrl =
|
||||
'https://cdn.jsdelivr.net/gh/letta-ai/letta-leaderboard@latest/data/letta_memory_leaderboard.yaml';
|
||||
|
||||
console.log('LB-script: fetching', dataUrl);
|
||||
|
||||
/* ----- fetch & parse YAML ----- */
|
||||
let rows;
|
||||
try {
|
||||
const resp = await fetch(dataUrl);
|
||||
console.log(`LB-script: status ${resp.status}`);
|
||||
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
|
||||
rows = yaml.load(await resp.text());
|
||||
} catch (err) {
|
||||
console.error('LB-script: failed to load YAML →', err);
|
||||
return;
|
||||
}
|
||||
|
||||
/* ----- wire up table ----- */
|
||||
const dir = Object.create(null);
|
||||
const tbody = document.getElementById('lb-body');
|
||||
const searchI = document.getElementById('lb-search');
|
||||
const headers = document.querySelectorAll('#lb-table thead th[data-key]');
|
||||
searchI.value = ''; // clear any persisted filter
|
||||
|
||||
const render = () => {
|
||||
const q = searchI.value.toLowerCase();
|
||||
tbody.innerHTML = rows
|
||||
.map((r) => {
|
||||
const over = r.total_cost > COST_CAP;
|
||||
const barW = over ? '100%' : (r.total_cost / COST_CAP) * 100 + '%';
|
||||
const costCls = over ? 'cost-high' : 'cost-ok';
|
||||
const warnIcon = over
|
||||
? `<span class="warn" title="Cost exceeds $${COST_CAP} cap - bar is clipped to full width">⚠</span>`
|
||||
: '';
|
||||
|
||||
return `
|
||||
<tr class="${q && !r.model.toLowerCase().includes(q) ? 'hidden' : ''}">
|
||||
<td style="padding:8px">${r.model}</td>
|
||||
|
||||
<td class="bar-cell avg metric">
|
||||
<div class="bar-viz" style="width:${r.average}%"></div>
|
||||
<span class="value">${pct(r.average)}</span>
|
||||
</td>
|
||||
|
||||
<td class="bar-cell ${costCls} metric">
|
||||
<div class="bar-viz" style="width:${barW}"></div>
|
||||
<span class="value">${cost(r.total_cost)}</span>
|
||||
${warnIcon}
|
||||
</td>
|
||||
</tr>`;
|
||||
})
|
||||
.join('');
|
||||
};
|
||||
|
||||
const setIndicator = (activeKey) => {
|
||||
headers.forEach((h) => {
|
||||
h.classList.remove('asc', 'desc');
|
||||
if (h.dataset.key === activeKey) h.classList.add(dir[activeKey]);
|
||||
});
|
||||
};
|
||||
|
||||
/* initial sort ↓ */
|
||||
dir.average = 'desc';
|
||||
rows.sort((a, b) => b.average - a.average);
|
||||
setIndicator('average');
|
||||
render();
|
||||
|
||||
/* search */
|
||||
searchI.addEventListener('input', render);
|
||||
|
||||
/* column sorting */
|
||||
headers.forEach((th) => {
|
||||
const key = th.dataset.key;
|
||||
th.addEventListener('click', () => {
|
||||
const asc = dir[key] === 'desc';
|
||||
dir[key] = asc ? 'asc' : 'desc';
|
||||
|
||||
rows.sort((a, b) => {
|
||||
const va = a[key],
|
||||
vb = b[key];
|
||||
const cmp =
|
||||
typeof va === 'number'
|
||||
? va - vb
|
||||
: String(va).localeCompare(String(vb));
|
||||
return asc ? cmp : -cmp;
|
||||
});
|
||||
|
||||
setIndicator(key);
|
||||
render();
|
||||
});
|
||||
});
|
||||
});
|
||||
16
fern/assets/logo-dark.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg width="75" height="22" viewBox="0 0 75 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_80_2)">
|
||||
<path d="M13.2017 8.80036H8.80133V13.2002H13.2017V8.80036Z" fill="white"/>
|
||||
<path d="M17.6019 2.99742V0H4.40033V2.99742C4.40033 3.77228 3.77267 4.39988 2.99773 4.39988H0V17.6001H2.99773C3.77267 17.6001 4.40033 18.2277 4.40033 19.0026V22H17.6019V19.0026C17.6019 18.2277 18.2296 17.6001 19.0045 17.6001H22.0023V4.39988H19.0045C18.2296 4.39988 17.6019 3.77228 17.6019 2.99742ZM17.6019 16.1971C17.6019 16.9719 16.9743 17.5995 16.1993 17.5995H5.80355C5.0286 17.5995 4.40094 16.9719 4.40094 16.1971V5.80234C4.40094 5.02747 5.0286 4.39988 5.80355 4.39988H16.1993C16.9743 4.39988 17.6019 5.02747 17.6019 5.80234V16.1971Z" fill="white"/>
|
||||
<path d="M34.9429 4.39986H33.0025V17.5995H41.6265V15.7326H34.9429V4.39986Z" fill="white"/>
|
||||
<path d="M47.221 8.28637H46.531C44.4567 8.28637 42.3641 9.55806 42.3641 12.3984V13.7789C42.3641 16.3534 43.8541 17.8909 46.3495 17.8909H47.4031C49.5085 17.8909 51.0065 16.6516 51.3139 14.6558L51.3408 14.4798H49.3423L49.3093 14.5886C49.0135 15.5676 48.2404 16.024 46.8763 16.024C45.1058 16.024 44.2703 15.2376 44.2501 13.5503H51.3878V12.3984C51.3878 9.55806 49.2952 8.28637 47.221 8.28637ZM44.3076 11.9004C44.5056 10.6623 45.2628 10.1533 46.8757 10.1533C48.4885 10.1533 49.2451 10.6623 49.4431 11.9004H44.3076Z" fill="white"/>
|
||||
<path d="M55.2595 4.39986H53.3197V8.28642H52.0302V10.1533H53.3197V13.851C53.3197 17.1124 55.3042 17.5995 56.4874 17.5995H57.7115V15.7326H57.0142C55.768 15.7326 55.2595 15.1032 55.2595 13.5608V10.1539H57.7115V8.28703H55.2595V4.39986Z" fill="white"/>
|
||||
<path d="M61.815 4.39986H59.8751V8.28642H58.5856V10.1533H59.8751V13.851C59.8751 17.1124 61.8596 17.5995 63.0428 17.5995H64.2669V15.7326H63.5696C62.3234 15.7326 61.815 15.1032 61.815 13.5608V10.1539H64.2669V8.28703H61.815V4.39986Z" fill="white"/>
|
||||
<path d="M74.2617 15.7326C73.8772 15.7326 73.7061 15.5724 73.7061 15.2131V12.0348C73.7061 8.77341 71.7217 8.28637 70.5385 8.28637H68.7588C67.2199 8.28637 65.5728 9.41323 65.5728 11.0907V11.2435H67.5126V11.0907C67.5126 10.5737 68.1452 10.1539 68.922 10.1539H70.0117C71.4039 10.1539 71.7046 10.655 71.7602 11.7739H68.958C66.7915 11.7739 65.3363 12.9301 65.3363 14.6509V14.8507C65.3363 15.7594 65.6889 17.8732 68.958 17.8732C69.7929 17.8732 71.2517 17.7272 72.0364 16.7959C72.5119 17.6007 73.5136 17.6007 74.2617 17.6007H74.4144V15.7338H74.2617V15.7326ZM71.7657 14.7407C71.7657 15.7778 70.1192 16.0045 69.4842 16.0045C67.6367 16.0045 67.2755 15.5541 67.2755 14.7768C67.2755 13.9139 68.0395 13.4581 69.4842 13.4581H71.7657V14.7407Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_80_2">
|
||||
<rect width="75" height="22" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
9
fern/assets/logo-light.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg aria-hidden="true" fill="none" height="100%" preserveaspectratio="xMidYMid meet" role="img" viewBox="0 0 75 22" width="100%" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13.2017 8.80036H8.80133V13.2002H13.2017V8.80036Z" fill="currentColor"></path>
|
||||
<path d="M17.6019 2.99742V0H4.40033V2.99742C4.40033 3.77228 3.77267 4.39988 2.99773 4.39988H0V17.6001H2.99773C3.77267 17.6001 4.40033 18.2277 4.40033 19.0026V22H17.6019V19.0026C17.6019 18.2277 18.2296 17.6001 19.0045 17.6001H22.0023V4.39988H19.0045C18.2296 4.39988 17.6019 3.77228 17.6019 2.99742ZM17.6019 16.1971C17.6019 16.9719 16.9743 17.5995 16.1993 17.5995H5.80355C5.0286 17.5995 4.40094 16.9719 4.40094 16.1971V5.80234C4.40094 5.02747 5.0286 4.39988 5.80355 4.39988H16.1993C16.9743 4.39988 17.6019 5.02747 17.6019 5.80234V16.1971Z" fill="currentColor"></path>
|
||||
<path d="M34.9429 4.39986H33.0025V17.5995H41.6265V15.7326H34.9429V4.39986Z" fill="currentColor"></path>
|
||||
<path d="M47.221 8.28637H46.531C44.4567 8.28637 42.3641 9.55806 42.3641 12.3984V13.7789C42.3641 16.3534 43.8541 17.8909 46.3495 17.8909H47.4031C49.5085 17.8909 51.0065 16.6516 51.3139 14.6558L51.3408 14.4798H49.3423L49.3093 14.5886C49.0135 15.5676 48.2404 16.024 46.8763 16.024C45.1058 16.024 44.2703 15.2376 44.2501 13.5503H51.3878V12.3984C51.3878 9.55806 49.2952 8.28637 47.221 8.28637ZM44.3076 11.9004C44.5056 10.6623 45.2628 10.1533 46.8757 10.1533C48.4885 10.1533 49.2451 10.6623 49.4431 11.9004H44.3076Z" fill="currentColor"></path>
|
||||
<path d="M55.2595 4.39986H53.3197V8.28642H52.0302V10.1533H53.3197V13.851C53.3197 17.1124 55.3042 17.5995 56.4874 17.5995H57.7115V15.7326H57.0142C55.768 15.7326 55.2595 15.1032 55.2595 13.5608V10.1539H57.7115V8.28703H55.2595V4.39986Z" fill="currentColor"></path>
|
||||
<path d="M61.815 4.39986H59.8751V8.28642H58.5856V10.1533H59.8751V13.851C59.8751 17.1124 61.8596 17.5995 63.0428 17.5995H64.2669V15.7326H63.5696C62.3234 15.7326 61.815 15.1032 61.815 13.5608V10.1539H64.2669V8.28703H61.815V4.39986Z" fill="currentColor"></path>
|
||||
<path d="M74.2617 15.7326C73.8772 15.7326 73.7061 15.5724 73.7061 15.2131V12.0348C73.7061 8.77341 71.7217 8.28637 70.5385 8.28637H68.7588C67.2199 8.28637 65.5728 9.41323 65.5728 11.0907V11.2435H67.5126V11.0907C67.5126 10.5737 68.1452 10.1539 68.922 10.1539H70.0117C71.4039 10.1539 71.7046 10.655 71.7602 11.7739H68.958C66.7915 11.7739 65.3363 12.9301 65.3363 14.6509V14.8507C65.3363 15.7594 65.6889 17.8732 68.958 17.8732C69.7929 17.8732 71.2517 17.7272 72.0364 16.7959C72.5119 17.6007 73.5136 17.6007 74.2617 17.6007H74.4144V15.7338H74.2617V15.7326ZM71.7657 14.7407C71.7657 15.7778 70.1192 16.0045 69.4842 16.0045C67.6367 16.0045 67.2755 15.5541 67.2755 14.7768C67.2755 13.9139 68.0395 13.4581 69.4842 13.4581H71.7657V14.7407Z" fill="currentColor"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
307
fern/assets/styles.css
Normal file
@@ -0,0 +1,307 @@
|
||||
/* .fern-header-container * {
|
||||
font-weight: 600;
|
||||
} */
|
||||
|
||||
/* Remove rounded corners across the docs site */
|
||||
:root {
|
||||
--radius: 0px;
|
||||
}
|
||||
|
||||
/* Override styles related to soft borders */
|
||||
.fern-button {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-collapsible-card {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-api-property-meta code {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-docs-badge {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.bg-accent-highlight {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-scroll-area {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-dropdown-item {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-anchor-icon {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-search-bar {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.keyboard-shortcut-hint {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-search-button {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
code:not(.code-block) {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-accordion {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.fern-table-root,
|
||||
.fern-table,
|
||||
.fern-table thead,
|
||||
.fern-table tbody,
|
||||
.fern-table tr,
|
||||
.fern-table th,
|
||||
.fern-table td {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
/* [data-radix-scroll-area-viewport] {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
[data-radix-popper-content-wrapper] {
|
||||
border-radius: 0 !important;
|
||||
} */
|
||||
[data-radix-popper-content-wrapper],
|
||||
[data-radix-popper-content-wrapper] > * {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.rounded-xl,
|
||||
.rounded-lg,
|
||||
.rounded-md,
|
||||
.rounded-sm,
|
||||
.fern-sidebar-link {
|
||||
border-radius: 0px !important;
|
||||
}
|
||||
|
||||
:is(.light) .code-block-line-content span[style*="color: rgb(194, 195, 197);"] {
|
||||
color: #8e8e8e !important;
|
||||
}
|
||||
|
||||
/* Different opacity for active items in the sidebar */
|
||||
|
||||
/* Light mode */
|
||||
:is(.light) .fern-sidebar-link-container[data-state="active"] .fern-sidebar-link {
|
||||
background-color: rgba(7, 7, 172, 0.04);
|
||||
}
|
||||
|
||||
:is(.light) body#fern-docs .fern-sidebar-link[data-state="active"] {
|
||||
background-color: rgba(7, 7, 172, 0.04);
|
||||
}
|
||||
|
||||
:is(.light) .fern-sidebar-link-container[data-state="active"] .fern-sidebar-link-text {
|
||||
color: #0707ac;
|
||||
}
|
||||
|
||||
:is(.light) body#fern-docs .fern-sidebar-link[data-state="active"] span {
|
||||
color: #0707ac;
|
||||
}
|
||||
|
||||
/* Dark mode */
|
||||
:is(.dark) .fern-sidebar-link-container[data-state="active"] .fern-sidebar-link {
|
||||
background-color: rgba(255, 187, 173, 0.08); /* #FFBBAD */
|
||||
}
|
||||
|
||||
:is(.dark) body#fern-docs .fern-sidebar-link[data-state="active"] {
|
||||
background-color: rgba(255, 187, 173, 0.08); /* #FFBBAD */
|
||||
}
|
||||
|
||||
:is(.dark) .fern-sidebar-link-container[data-state="active"] .fern-sidebar-link-text {
|
||||
color: #FF5533;
|
||||
}
|
||||
|
||||
:is(.dark) body#fern-docs .fern-sidebar-link[data-state="active"] span {
|
||||
color: #FF5533;
|
||||
}
|
||||
|
||||
/* Make uppercase sidebar heading */
|
||||
.fern-sidebar-heading .fern-sidebar-heading-content,
|
||||
.fern-breadcrumb-item {
|
||||
/* font-family: var(--typography-code-font-family); */
|
||||
font-weight: 600;
|
||||
/* letter-spacing: 0.05em; */
|
||||
text-transform: uppercase;
|
||||
/* color: var(--gray-12); */
|
||||
font-size: 0.8rem;
|
||||
/* text-decoration: none; */
|
||||
}
|
||||
|
||||
/* .fern-theme-default.fern-container .fern-header-tabs .fern-header-tab-button .fern-header-container * {
|
||||
font-size: 1rem;
|
||||
} */
|
||||
|
||||
.t-muted.whitespace-nowrap.text-xs,
|
||||
.inline-flex.items-baseline.gap-1 {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* @supports (overscroll-behavior: none) {
|
||||
html, body {
|
||||
overscroll-behavior: none;
|
||||
}
|
||||
} */
|
||||
|
||||
/* dark/light mode toggle for images */
|
||||
:is(.dark) img.dark {
|
||||
display: block;
|
||||
}
|
||||
|
||||
:is(.dark) img.light {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:is(.light) img.light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
:is(.light) img.dark {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Landing page styles */
|
||||
.landing-page {
|
||||
margin-inline: auto;
|
||||
min-width: calc(var(--spacing) * 0);
|
||||
padding-inline: var(--page-padding);
|
||||
max-width: calc(var(--spacing-page-width) + var(--spacing-page-padding)*2);
|
||||
|
||||
.letta-header {
|
||||
padding-top: 7rem !important;
|
||||
padding-bottom: 7rem !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.letta-header-bg {
|
||||
background-color: #f6f6f6 !important;
|
||||
width: 100vw;
|
||||
position: absolute;
|
||||
top: 0%;
|
||||
bottom: 0%;
|
||||
left: 50%;
|
||||
transform: translate(-50%);
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.hero-image-container {
|
||||
width: var(--page-width);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hero-image {
|
||||
position: absolute !important;
|
||||
right: 0 !important;
|
||||
top: 50% !important;
|
||||
transform: translateY(-50%) !important;
|
||||
height: 100% !important;
|
||||
max-height: 400px !important;
|
||||
z-index: 0 !important;
|
||||
opacity: 0.5 !important;
|
||||
width: fit-content;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.hero-image.dark {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.letta-header h1 {
|
||||
font-size: 4.0rem !important;
|
||||
line-height: 1.1 !important;
|
||||
font-weight: 300 !important;
|
||||
font-family: Roobert, sans-serif !important; /* Use regular Roobert instead of Medium */
|
||||
}
|
||||
|
||||
.letta-header p {
|
||||
font-size: 1.25rem !important;
|
||||
line-height: 1.3 !important;
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
|
||||
.letta-header a {
|
||||
border-bottom: 1px solid rgba(255,255,255,0.5) !important;
|
||||
font-size: 0.5rem !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.letta-header a:hover {
|
||||
border-bottom-color: white !important;
|
||||
}
|
||||
|
||||
.fern-main .landingbody {
|
||||
max-width: 1195px !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
|
||||
#fern-sidebar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@media (max-width: 1504px) {
|
||||
.hero-image-container {
|
||||
width: 100vw !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablet viewport breakpoint */
|
||||
@media (max-width: 1024px) {
|
||||
.letta-header {
|
||||
padding-top: 4rem !important;
|
||||
padding-bottom: 4rem !important;
|
||||
}
|
||||
|
||||
.letta-header h1 {
|
||||
font-size: 3rem !important;
|
||||
}
|
||||
|
||||
.letta-header p {
|
||||
font-size: 1.1rem !important;
|
||||
}
|
||||
|
||||
.hero-image-container {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Mobile viewport breakpoint */
|
||||
@media (max-width: 640px) {
|
||||
.letta-header {
|
||||
padding-top: 3rem !important;
|
||||
padding-bottom: 3rem !important;
|
||||
}
|
||||
|
||||
.letta-header h1 {
|
||||
font-size: 2.5rem !important;
|
||||
}
|
||||
|
||||
.letta-header p {
|
||||
font-size: 1rem !important;
|
||||
}
|
||||
|
||||
.letta-header .max-w-4xl {
|
||||
padding-left: 1rem !important;
|
||||
padding-right: 1rem !important;
|
||||
}
|
||||
|
||||
.landingbody {
|
||||
padding-left: 1rem !important;
|
||||
padding-right: 1rem !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:is(.dark) .landing-page .letta-header-bg {
|
||||
background-color: #151515 !important;
|
||||
}
|
||||
|
||||
|
||||
:is(.dark) .landing-page.hero-image.light {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
:is(.dark) .landing-page .hero-image.dark {
|
||||
display: block !important;
|
||||
}
|
||||
72
fern/changelog/2025-01-28.mdx
Normal file
@@ -0,0 +1,72 @@
|
||||
## Consistency Across Messages APIs
|
||||
|
||||
<Note> These are the final changes from our API overhaul, which means they are not backwards compatible to prior versions of our APIs and SDKs. Upgrading may require changes to your code. </Note>
|
||||
|
||||
### Flattened `UserMessage` content
|
||||
|
||||
The content field on `UserMessage` objects returned by our Messages endpoints have been simplified to flat strings containing raw message text, rather than JSON strings with message text nested inside.
|
||||
|
||||
#### Before:
|
||||
```python
|
||||
{
|
||||
"id": "message-dea2ceab-0863-44ea-86dc-70cf02c05946",
|
||||
"date": "2025-01-28T01:18:18+00:00",
|
||||
"message_type": "user_message",
|
||||
"content": "{\n \"type\": \"user_message\",\n \"message\": \"Hello, how are you?\",\n \"time\": \"2025-01-28 01:18:18 AM UTC+0000\"\n}"
|
||||
}
|
||||
```
|
||||
|
||||
#### After:
|
||||
```python
|
||||
{
|
||||
"id": "message-dea2ceab-0863-44ea-86dc-70cf02c05946",
|
||||
"date": "2025-01-28T01:18:18+00:00",
|
||||
"message_type": "user_message",
|
||||
"content": "Hello, how are you?"
|
||||
}
|
||||
```
|
||||
|
||||
### Top-level `use_assistant_message` parameter defaults to True
|
||||
|
||||
All message related APIs now include a top-level `use_assistant_message` parameter, which defaults to `True` if not specified. This parameter controls whether the endpoint should parse specific tool call arguments (default `send_message`) as AssistantMessage objects rather than ToolCallMessage objects.
|
||||
|
||||
#### Before:
|
||||
```python
|
||||
response = client.agents.messages.create(
|
||||
agent_id=agent.id,
|
||||
messages=[
|
||||
MessageCreate(
|
||||
role="user",
|
||||
content="call the big_return function",
|
||||
),
|
||||
],
|
||||
config=LettaRequestConfig(use_assistant_message=False),
|
||||
)
|
||||
```
|
||||
|
||||
#### After:
|
||||
```python
|
||||
response = client.agents.messages.create(
|
||||
agent_id=agent.id,
|
||||
messages=[
|
||||
MessageCreate(
|
||||
role="user",
|
||||
content="call the big_return function",
|
||||
),
|
||||
],
|
||||
use_assistant_message=False,
|
||||
)
|
||||
```
|
||||
|
||||
Previously, the `List Messages` endpoint defaulted to False internally, so this change may cause unexpected behavior in your code. To fix this, you can set the `use_assistant_message` parameter to `False` in your request.
|
||||
|
||||
```python
|
||||
messages = client.agents.messages.list(
|
||||
limit=10,
|
||||
use_assistant_message=False,
|
||||
)
|
||||
```
|
||||
|
||||
### Consistent message return type
|
||||
|
||||
All message related APIs return `LettaMessage` objects now, which are simplified versions of `Message` objects stored in the database backend. Previously, our `List Messages` endpoint returned `Message` objects by default, which is no longer an option.
|
||||
22
fern/changelog/2025-01-31.mdx
Normal file
@@ -0,0 +1,22 @@
|
||||
### Tool rules improvements
|
||||
|
||||
ToolRule objects no longer should specify a `type` at instantiation, as this field is now immutable.
|
||||
|
||||
#### Before:
|
||||
```python
|
||||
rule = InitToolRule(
|
||||
tool_name="secret_message",
|
||||
type="run_first"
|
||||
)
|
||||
```
|
||||
|
||||
#### After:
|
||||
```python
|
||||
rule = InitToolRule(tool_name="secret_message")
|
||||
```
|
||||
|
||||
Letta also now supports smarter retry behavior for tool rules in the case of unrecoverable failures.
|
||||
|
||||
### New API routes to query agent steps
|
||||
|
||||
The [`List Steps`](https://docs.letta.com/api-reference/steps/list-steps) and [`Retrieve Step`](https://docs.letta.com/api-reference/steps/retrieve-step) routes have been added to enable querying for additional metadata around agent execution.
|
||||
42
fern/changelog/2025-02-05.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
### Query tools by name
|
||||
|
||||
The `List Tools` API now supports querying by tool name.
|
||||
|
||||
```python
|
||||
send_message_tool_id = client.agents.tools.list(tool_name="secret_message")[0].id
|
||||
```
|
||||
|
||||
### Authorization header now supports password
|
||||
|
||||
For self-deployed instances of Letta that are password-protected, the `Authorization` header now supports parsing passwords in addition to API keys. `X-BARE-PASSWORD` will still be supported as legacy, but will be deprecated in a future release.
|
||||
|
||||
#### Before:
|
||||
```sh
|
||||
curl --request POST \
|
||||
--url https://MYSERVER.up.railway.app/v1/agents/ \
|
||||
--header 'X-BARE-PASSWORD: password banana' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
...
|
||||
}'
|
||||
```
|
||||
|
||||
#### After:
|
||||
```sh
|
||||
curl --request POST \
|
||||
--url https://MYSERVER.up.railway.app/v1/agents/ \
|
||||
--header 'AUTHORIZATION: Bearer banana' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
...
|
||||
}'
|
||||
```
|
||||
|
||||
Password can now be passed via the `token` field when initializing the Letta client:
|
||||
|
||||
```python
|
||||
client = LettaClient(
|
||||
base_url="https://MYSERVER.up.railway.app",
|
||||
token="banana",
|
||||
)
|
||||
```
|
||||
11
fern/changelog/2025-02-06.mdx
Normal file
@@ -0,0 +1,11 @@
|
||||
## Agents API Improvements
|
||||
|
||||
<Note> These APIs are only available for Letta Cloud. </Note>
|
||||
|
||||
### Agent Search
|
||||
|
||||
The [`/v1/agents/search`](https://docs.letta.com/api-reference/agents/search) API has been updated to support pagination via `after` query parameter
|
||||
|
||||
### Agent Creation from Template
|
||||
|
||||
The [`/v1/templates/`](https://docs.letta.com/api-reference/templates/createagentsfromtemplate) creation API has been updated to support adding `tags` at creation time
|
||||
3
fern/changelog/2025-02-10.mdx
Normal file
@@ -0,0 +1,3 @@
|
||||
## Temperature and Max Tokens Supported via LLM Config
|
||||
|
||||
These values are now configurable when creating and modifying agents via [`llm_config`](https://docs.letta.com/api-reference/agents/modify#request.body.llm_config) parameter for subsequent LLM requests.
|
||||
9
fern/changelog/2025-02-12.mdx
Normal file
@@ -0,0 +1,9 @@
|
||||
## New Features
|
||||
|
||||
### Google Vertex support
|
||||
|
||||
Google Vertex is now a supported endpoint type for Letta agents.
|
||||
|
||||
### Option to disable message persistence for a given agent
|
||||
|
||||
Letta agents now have an optional `message_buffer_autoclear` flag. If set to True (default False), the message history will not be persisted in-context between requests (though the agent will still have access to core, archival, and recall memory).
|
||||
113
fern/changelog/2025-02-19.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
## Project Slug Moved to Request Header
|
||||
|
||||
<Note> Projects are only available for Letta Cloud. </Note>
|
||||
|
||||
Project slug can now be specified via request header `X-Project` for agent creation. The existing `project` parameter will soon be deprecated.
|
||||
|
||||
#### Before
|
||||
<CodeBlocks>
|
||||
```curl title="curl"
|
||||
curl -X POST https://app.letta.com/v1/agents \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'Authorization: Bearer YOUR_API_KEY' \
|
||||
-d '{
|
||||
"project":"YOUR_PROJECT_SLUG"
|
||||
"model":"gpt-4o-mini",
|
||||
"embedding":"openai/text-embedding-3-small"
|
||||
"memory_blocks": [
|
||||
{
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
}
|
||||
],
|
||||
}'
|
||||
```
|
||||
```python title="python"
|
||||
from letta_client import CreateBlock, Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
project="YOUR_PROJECT_SLUG",
|
||||
model="gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small"
|
||||
memory_blocks=[
|
||||
CreateBlock(
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
),
|
||||
],
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
project: "YOUR_PROJECT_SLUG",
|
||||
model: "gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small"
|
||||
memory_blocks: [
|
||||
{
|
||||
label: "human",
|
||||
value: "name: Caren"
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
|
||||
#### After
|
||||
<CodeBlocks>
|
||||
```curl title="curl"
|
||||
curl -X POST https://app.letta.com/v1/agents \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'Authorization: Bearer YOUR_API_KEY' \
|
||||
-H 'X-Project: YOUR_PROJECT_SLUG' \
|
||||
-d '{
|
||||
"model":"gpt-4o-mini",
|
||||
"embedding":"openai/text-embedding-3-small"
|
||||
"memory_blocks": [
|
||||
{
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
}
|
||||
],
|
||||
}'
|
||||
```
|
||||
```python title="python"
|
||||
from letta_client import CreateBlock, Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
x_project="YOUR_PROJECT_SLUG",
|
||||
model="gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small"
|
||||
memory_blocks=[
|
||||
CreateBlock(
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
),
|
||||
],
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
x_project: "YOUR_PROJECT_SLUG",
|
||||
model: "gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small"
|
||||
memory_blocks: [
|
||||
{
|
||||
label: "human",
|
||||
value: "name: Caren"
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
7
fern/changelog/2025-02-21.mdx
Normal file
@@ -0,0 +1,7 @@
|
||||
## New Identities Feature
|
||||
|
||||
We've added a new Identities feature that helps you manage users in your multi-user Letta application. Each Identity can represent a user or organization in your system and store their metadata.
|
||||
|
||||
You can associate an Identity with one or more agents, making it easy to track which agents belong to which users. Agents can also be associated with multiple identities, enabling shared access across different users. This release includes full CRUD (Create, Read, Update, Delete) operations for managing Identities through our API.
|
||||
|
||||
For more information on usage, visit our [Identities documentation](/api-reference/identities) and [usage guide](/guides/agents/multi-user).
|
||||
85
fern/changelog/2025-02-23.mdx
Normal file
@@ -0,0 +1,85 @@
|
||||
## Core Memory and Archival Memory SDK APIs Renamed to Blocks and Passages
|
||||
|
||||
<Note> This is a breaking SDK change and is not backwards compatible. </Note>
|
||||
|
||||
Given the confusion around our advanced functionality for managing memory, we've renamed the Core Memory SDK API to `blocks` and the Archival Memory SDK API to `passages` so that our API naming reflects the unit of memory stored. This change only affects our SDK, and does not affect Letta's Rest API.
|
||||
|
||||
#### Before
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import CreateBlock, Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
model="gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small"
|
||||
memory_blocks=[
|
||||
CreateBlock(
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
),
|
||||
],
|
||||
)
|
||||
blocks = client.agents.core_memory.list_blocks(agent_id=agent.id)
|
||||
client.agents.core_memory.detach_block(agent_id=agent.id, block_id=blocks[0].id)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
model: "gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small"
|
||||
memory_blocks: [
|
||||
{
|
||||
label: "human",
|
||||
value: "name: Caren"
|
||||
},
|
||||
],
|
||||
});
|
||||
const blocks = await client.agents.coreMemory.listBlocks(agent.id);
|
||||
await client.agents.coreMemory.detachBlock(agent.id, blocks[0].id);
|
||||
```
|
||||
</CodeBlocks>
|
||||
|
||||
#### After
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import CreateBlock, Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
model="gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small"
|
||||
memory_blocks=[
|
||||
CreateBlock(
|
||||
"label": "human",
|
||||
"value": "name: Caren"
|
||||
),
|
||||
],
|
||||
)
|
||||
blocks = client.agents.blocks.list(agent_id=agent.id)
|
||||
client.agents.blocks.detach(agent_id=agent.id, block_id=blocks[0].id)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
model: "gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small"
|
||||
memory_blocks: [
|
||||
{
|
||||
label: "human",
|
||||
value: "name: Caren"
|
||||
},
|
||||
],
|
||||
});
|
||||
const blocks = client.agents.blocks.list(agent.id)
|
||||
await client.agents.blocks.detach(agent.id, blocks[0].id)
|
||||
```
|
||||
</CodeBlocks>
|
||||
3
fern/changelog/2025-02-26.mdx
Normal file
@@ -0,0 +1,3 @@
|
||||
## xAI / Grok Now Supported
|
||||
|
||||
We've added xAI support in the latest SDK version. To enable xAI models, set your `XAI_API_KEY` as an environment variable: `export XAI_API_KEY="..."`.
|
||||
28
fern/changelog/2025-02-27.mdx
Normal file
@@ -0,0 +1,28 @@
|
||||
## Added Modify Passage API
|
||||
|
||||
We've introduced a new API endpoint that allows you to modify existing passages within agent memory.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.modify_passage(
|
||||
agent_id="AGENT_ID",
|
||||
memory_id="MEMORY_ID",
|
||||
text="Updated passage content"
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.modifyPassage({
|
||||
agent_id: "AGENT_ID",
|
||||
memory_id: "MEMORY_ID",
|
||||
text: "Updated passage content"
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
77
fern/changelog/2025-03-01.mdx
Normal file
@@ -0,0 +1,77 @@
|
||||
## Enhanced Tool Definitions with Complex Schemas
|
||||
|
||||
### Complex Schema Support for Tool Arguments
|
||||
|
||||
You can now use complex Pydantic schemas to define arguments for tools, enabling better type safety and validation for your tool inputs.
|
||||
|
||||
```python
|
||||
from pydantic import BaseModel
|
||||
from typing import List, Optional
|
||||
|
||||
class ItemData(BaseModel):
|
||||
name: str
|
||||
sku: str
|
||||
price: float
|
||||
description: Optional[str] = None
|
||||
|
||||
class InventoryEntry(BaseModel):
|
||||
item: ItemData
|
||||
location: str
|
||||
current_stock: int
|
||||
minimum_stock: int = 5
|
||||
|
||||
class InventoryEntryData(BaseModel):
|
||||
data: InventoryEntry
|
||||
quantity_change: int
|
||||
```
|
||||
|
||||
## Tool Creation from Function with Complex Schema
|
||||
|
||||
Use the args_schema parameter to specify a Pydantic model for tool arguments when creating tools from functions.
|
||||
|
||||
```python
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
|
||||
def manage_inventory_mock(data: InventoryEntry, quantity_change: int) -> bool:
|
||||
"""
|
||||
Implementation of the manage_inventory tool
|
||||
"""
|
||||
print(f"Updated inventory for {data.item.name} with a quantity change of {quantity_change}")
|
||||
return True
|
||||
|
||||
tool_from_func = client.tools.upsert_from_function(
|
||||
func=manage_inventory_mock,
|
||||
args_schema=InventoryEntryData,
|
||||
)
|
||||
```
|
||||
### BaseTool Class Extension
|
||||
|
||||
For more complex tool implementations, you can also extend the `BaseTool` class to create custom tools with full control over the implementation.
|
||||
|
||||
```python
|
||||
from letta_client import BaseTool
|
||||
from typing import Type, List
|
||||
from pydantic import BaseModel
|
||||
|
||||
class ManageInventoryTool(BaseTool):
|
||||
name: str = "manage_inventory"
|
||||
args_schema: Type[BaseModel] = InventoryEntryData
|
||||
description: str = "Update inventory catalogue with a new data entry"
|
||||
tags: List[str] = ["inventory", "shop"]
|
||||
|
||||
def run(self, data: InventoryEntry, quantity_change: int) -> bool:
|
||||
"""
|
||||
Implementation of the manage_inventory tool
|
||||
"""
|
||||
# implementation
|
||||
print(f"Updated inventory for {data.item.name} with a quantity change of {quantity_change}")
|
||||
return True
|
||||
|
||||
custom_tool = client.tools.add(
|
||||
tool=ManageInventoryTool(),
|
||||
)
|
||||
```
|
||||
29
fern/changelog/2025-03-02.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
## Added List Run Steps API
|
||||
|
||||
We've introduced a new API endpoint that allows you to list all steps associated with a specific run. This feature makes it easier to track and analyze the sequence of steps performed during a run.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
steps = client.runs.list_run_steps(
|
||||
run_id="RUN_ID",
|
||||
)
|
||||
for step in steps:
|
||||
print(f"Step ID: {step.id}, Tokens: {step.total_tokens}")
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const steps = await client.runs.listRunSteps({
|
||||
run_id: "RUN_ID",
|
||||
});
|
||||
steps.forEach(step => {
|
||||
console.log(`Step ID: ${step.id}, Tokens: ${step.total_tokens}`);
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
60
fern/changelog/2025-03-05.mdx
Normal file
@@ -0,0 +1,60 @@
|
||||
## Agent Serialization: Download and Upload APIs
|
||||
|
||||
We've added new APIs that allow you to download an agent's serialized JSON representation and upload it to recreate the agent in the system. These features enable easy agent backup, transfer between environments, and version control of agent configurations.
|
||||
|
||||
### Import Agent Serialized
|
||||
|
||||
Import a serialized agent file and recreate the agent in the system.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.import_agent_serialized(
|
||||
file=open("/path/to/agent/file.af", "rb"),
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
import * as fs from 'fs';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.importAgentSerialized({
|
||||
file: fs.createReadStream("/path/to/your/file"),
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
|
||||
### Export Agent Serialized
|
||||
Export the serialized JSON representation of an agent, formatted with indentation.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent_json = client.agents.export_agent_serialized(
|
||||
agent_id="AGENT_ID",
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agentJson = await client.agents.exportAgentSerialized({
|
||||
agent_id: "AGENT_ID",
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
|
||||
## Use Cases
|
||||
|
||||
- Environment Migration: Transfer agents between local, desktop, and cloud environments
|
||||
- Version Control: Save agent configurations before making significant changes
|
||||
- Templating: Create template agents that can be quickly deployed for different use cases
|
||||
- Sharing: Share agent configurations with team members or across organizations
|
||||
32
fern/changelog/2025-03-06.mdx
Normal file
@@ -0,0 +1,32 @@
|
||||
## Message Modification API
|
||||
|
||||
We've added a new API endpoint that allows you to modify existing messages in an agent's conversation history. This feature is particularly useful for editing message history to refine agent behavior without starting a new conversation.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta, UpdateSystemMessage
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.messages.modify(
|
||||
agent_id="AGENT_ID",
|
||||
message_id="MESSAGE_ID",
|
||||
request=UpdateSystemMessage(
|
||||
content="The agent should prioritize brevity in responses.",
|
||||
),
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.messages.modify({
|
||||
agent_id: "AGENT_ID",
|
||||
message_id: "MESSAGE_ID",
|
||||
request: {
|
||||
content: "The agent should prioritize brevity in responses."
|
||||
}
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
51
fern/changelog/2025-03-12.mdx
Normal file
@@ -0,0 +1,51 @@
|
||||
## Identity Support for Memory Blocks
|
||||
|
||||
Memory blocks can now be associated with specific identities, allowing for better organization and retrieval of contextual information about various entities in your agent's knowledge base.
|
||||
|
||||
### Adding Blocks to an Identity
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta, CreateBlock
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.identities.modify(
|
||||
identity_id="IDENTITY_ID",
|
||||
block_ids=["BLOCK_ID"],
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.identities.modify({
|
||||
identity_id: "IDENTITY_ID",
|
||||
block_ids: ["BLOCK_ID"],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
|
||||
### Querying Blocks by Identity
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.blocks.list(
|
||||
identity_id="IDENTITY_ID",
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.blocks.list({
|
||||
identity_id: "IDENTITY_ID",
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
3
fern/changelog/2025-03-13.mdx
Normal file
@@ -0,0 +1,3 @@
|
||||
## MCP Now Supported
|
||||
|
||||
We've added MCP support in the latest SDK version. For full documentation on how to enable MCP with Letta, visit [our MCP guide](/guides/mcp/setup).
|
||||
24
fern/changelog/2025-03-14.mdx
Normal file
@@ -0,0 +1,24 @@
|
||||
## New `include_relationships` Parameter for List Agents API
|
||||
|
||||
You can now leverage a more customized, lightweight response from the list agents API by setting the `include_relationships` parameter to which fields you'd like to fetch in the response.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agents = client.agents.list(
|
||||
include_relationships=["identities", "blocks", "tools"],
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agents = await client.agents.list({
|
||||
include_relationships: ["identities", "blocks", "tools"],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
28
fern/changelog/2025-03-15.mdx
Normal file
@@ -0,0 +1,28 @@
|
||||
## Message `content` field extended to include Multi-modal content parts
|
||||
|
||||
The `content` field on `UserMessage` and `AssistantMessage` objects returned by our Messages endpoints has been extended to support multi-modal content parts, in anticipation of allowing you to send and receive messages with text, images, and other media.
|
||||
|
||||
### Before:
|
||||
```curl
|
||||
{
|
||||
"id": "message-dea2ceab-0863-44ea-86dc-70cf02c05946",
|
||||
"date": "2025-01-28T01:18:18+00:00",
|
||||
"message_type": "user_message",
|
||||
"content": "Hello, how are you?"
|
||||
}
|
||||
```
|
||||
|
||||
### After:
|
||||
```curl
|
||||
{
|
||||
"id": "message-dea2ceab-0863-44ea-86dc-70cf02c05946",
|
||||
"date": "2025-01-28T01:18:18+00:00",
|
||||
"message_type": "user_message",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "Hello, how are you?"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
3
fern/changelog/2025-03-16.mdx
Normal file
@@ -0,0 +1,3 @@
|
||||
## `Embedding` model info now specified directly on Source
|
||||
|
||||
The `Source` object returned by our Sources endpoints now stores embedding related fields, to specify the embedding model and chunk size used to generate the source.
|
||||
39
fern/changelog/2025-03-17.mdx
Normal file
@@ -0,0 +1,39 @@
|
||||
## Max invocation count tool rule
|
||||
|
||||
A new tool rule has been introduced for configuring a max step count per tool rule.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.create(
|
||||
model="openai/gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tool_rules=[
|
||||
MaxCountPerStepToolRule(
|
||||
tool_name="manage_inventory",
|
||||
max_count_limit=10
|
||||
)
|
||||
]
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
model: "openai/gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small",
|
||||
tool_rules: [
|
||||
{
|
||||
type: "max_count_per_step",
|
||||
tool_name: "manage_inventory",
|
||||
max_count_limit: 10
|
||||
}
|
||||
]
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
11
fern/changelog/2025-03-21.mdx
Normal file
@@ -0,0 +1,11 @@
|
||||
## Output messages added to Steps API
|
||||
|
||||
The `Step` object returned by our Steps endpoints now includes a `steps_messages` field, which contains a list of messages generated by the step.
|
||||
|
||||
## Order parameter added to List Agents and List Passages APIs
|
||||
|
||||
The `List Agents` and `List Passages` endpoints now support an `ascending` parameter to sort the results based on creation timestamp.
|
||||
|
||||
## Filter parameters added List Passages API
|
||||
|
||||
The `List Passages` endpoint now supports filter parameters to filter the results including `after`, `before`, and `search` for filtering by text.
|
||||
30
fern/changelog/2025-03-24.mdx
Normal file
@@ -0,0 +1,30 @@
|
||||
## New fields to support reasoning models
|
||||
|
||||
The `LlmConfig` object now includes a `enable_reasoner` field, enables toggling on thinking steps for reasoning models like Sonnet 3.7. This change also includes support for specifying this along with `max_reasoning_tokens` in the agent creation API.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
model="claude/sonnet-3-7",
|
||||
enable_reasoner=True,
|
||||
max_reasoning_tokens=10000,
|
||||
max_tokens=100000
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
model: "claude/sonnet-3-7",
|
||||
enable_reasoner: true,
|
||||
max_reasoning_tokens: 10000,
|
||||
max_tokens: 100000
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
28
fern/changelog/2025-03-26.mdx
Normal file
@@ -0,0 +1,28 @@
|
||||
## Modify Agent API now supports `model` and `embedding` fields
|
||||
|
||||
The `Modify Agent` API now supports `model` and `embedding` fields to update the model and embedding used by the agent using the handles rather than specifying the entire configs.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.modify(
|
||||
agent_id="AGENT_ID",
|
||||
model="openai/gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.modify({
|
||||
agent_id: "AGENT_ID",
|
||||
model: "openai/gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small",
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
26
fern/changelog/2025-04-02.mdx
Normal file
@@ -0,0 +1,26 @@
|
||||
## New `strip_messages` field in Import Agent API
|
||||
|
||||
The `Import Agent` API now supports a new `strip_messages` field to remove messages from the agent's conversation history when importing a serialized agent file.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
client.agents.import_agent_serialized(
|
||||
file=open("/path/to/agent/file.af", "rb"),
|
||||
strip_messages=True,
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.agents.importAgentSerialized({
|
||||
file: fs.createReadStream("/path/to/your/file"),
|
||||
strip_messages: true,
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
41
fern/changelog/2025-04-04.mdx
Normal file
@@ -0,0 +1,41 @@
|
||||
## Add new `otid` field to Message API
|
||||
|
||||
The `Message` object returned by our Messages endpoints now includes an offline threading id field, a unique identifier set at creation time, which can be used by the client to deduplicate messages.
|
||||
|
||||
### Before:
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta, MessageCreate
|
||||
import uuid
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
messages = client.agents.messages.create(
|
||||
agent_id="AGENT_ID",
|
||||
messages=[
|
||||
MessageCreate(
|
||||
role="user",
|
||||
content="Hello, how are you?"
|
||||
otid=uuid.uuid4(),
|
||||
)
|
||||
]
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const messages = await client.agents.messages.create({
|
||||
agent_id: "AGENT_ID",
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "Hello, how are you?",
|
||||
otid: uuid.v4(),
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
24
fern/changelog/2025-04-05.mdx
Normal file
@@ -0,0 +1,24 @@
|
||||
## Runs API can now be filtered by Agent ID
|
||||
|
||||
The Runs API now supports filtering by `agent_id` to retrieve all runs and all active runs associated with a specific agent.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
runs = client.runs.list_active_runs(
|
||||
agent_id="AGENT_ID",
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const runs = await client.runs.listActiveRuns({
|
||||
agent_id: "AGENT_ID",
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
39
fern/changelog/2025-04-09.mdx
Normal file
@@ -0,0 +1,39 @@
|
||||
## New Parent Tool Rule
|
||||
|
||||
A new tool rule has been introduced for configuring a parent tool rule, which only allows a target tool to be called after a parent tool has been run.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent = client.agents.create(
|
||||
model="openai/gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tool_rules=[
|
||||
ParentToolRule(
|
||||
tool_name="parent_tool",
|
||||
children=["child_tool"]
|
||||
)
|
||||
]
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agent = await client.agents.create({
|
||||
model: "openai/gpt-4o-mini",
|
||||
embedding: "openai/text-embedding-3-small",
|
||||
tool_rules: [
|
||||
{
|
||||
type: "parent",
|
||||
tool_name: "parent_tool",
|
||||
children: ["child_tool"]
|
||||
}
|
||||
]
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
48
fern/changelog/2025-04-10.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
# New Upsert Properties API for Identities
|
||||
|
||||
The `Upsert Properties` API has been added to the Identities endpoint, allowing you to update or create properties for an identity.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import IdentityProperty, Letta
|
||||
client = Letta(
|
||||
token="YOUR_TOKEN",
|
||||
)
|
||||
client.identities.upsert_properties(
|
||||
identity_id="IDENTITY_ID",
|
||||
request=[
|
||||
IdentityProperty(
|
||||
key="name",
|
||||
value="Caren",
|
||||
type="string",
|
||||
),
|
||||
IdentityProperty(
|
||||
key="email",
|
||||
value="caren@example.com",
|
||||
type="string",
|
||||
)
|
||||
],
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
await client.identities.upsertProperties({
|
||||
identity_id: "IDENTITY_ID",
|
||||
properties: [
|
||||
{
|
||||
key: "name",
|
||||
value: "Caren",
|
||||
type: "string",
|
||||
},
|
||||
{
|
||||
key: "email",
|
||||
value: "caren@example.com",
|
||||
type: "string",
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
42
fern/changelog/2025-04-13.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
## New `reasoning_effort` field added to LLMConfig
|
||||
|
||||
The `reasoning_effort` field has been added to the `LLMConfig` object to control the amount of reasoning the model should perform, to support OpenAI's o1 and o3 reasoning models.
|
||||
|
||||
## New `sender_id` parameter added to Message model
|
||||
|
||||
The `Message` object now includes a `sender_id` field, which is the ID of the sender of the message, which can be either an identity ID or an agent ID. The `sender_id` is expected to be passed in at message creation time.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
messages = client.agents.messages.create(
|
||||
agent_id="AGENT_ID",
|
||||
messages=[
|
||||
MessageCreate(
|
||||
role="user",
|
||||
content="Hello, how are you?",
|
||||
sender_id="IDENTITY_ID",
|
||||
)
|
||||
]
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const messages = await client.agents.messages.create({
|
||||
agent_id: "AGENT_ID",
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "Hello, how are you?",
|
||||
sender_id: "IDENTITY_ID",
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
24
fern/changelog/2025-04-14.mdx
Normal file
@@ -0,0 +1,24 @@
|
||||
## New List Agent Groups API added
|
||||
|
||||
The `List Agent Groups` API has been added to the Agents endpoint, allowing you to retrieve all multi-agent groups associated with a specific agent.
|
||||
|
||||
<CodeBlocks>
|
||||
```python title="python"
|
||||
from letta_client import Letta
|
||||
client = Letta(
|
||||
token="YOUR_API_KEY",
|
||||
)
|
||||
agent_groups = client.agents.list_agent_groups(
|
||||
agent_id="AGENT_ID",
|
||||
)
|
||||
```
|
||||
```typescript title="node.js"
|
||||
import { LettaClient } from '@letta-ai/letta-client';
|
||||
const client = new LettaClient({
|
||||
token: "YOUR_API_KEY",
|
||||
});
|
||||
const agentGroups = await client.agents.listAgentGroups({
|
||||
agent_id: "AGENT_ID",
|
||||
});
|
||||
```
|
||||
</CodeBlocks>
|
||||
5
fern/changelog/2025-04-15.mdx
Normal file
@@ -0,0 +1,5 @@
|
||||
## New Batch message creation API
|
||||
|
||||
A series of new `Batch` endpoints has been introduced to support batch message creation, allowing you to perform multiple LLM requests in a single API call. These APIs leverage provider batch APIs under the hood, which can be more cost-effective than making multiple API calls.
|
||||
|
||||
New endpoints can be found here: [Batch Messages](https://docs.letta.com/api-reference/messages/batch)
|
||||
7
fern/changelog/2025-04-16.mdx
Normal file
@@ -0,0 +1,7 @@
|
||||
# New Projects Endpoint
|
||||
|
||||
<Note> These APIs are only available for Letta Cloud. </Note>
|
||||
|
||||
A new `Projects` endpoint has been added to the API, allowing you to manage projects and their associated templates.
|
||||
|
||||
The new endpoints can be found here: [Projects](https://docs.letta.com/api-reference/projects)
|
||||
31
fern/changelog/2025-04-18.mdx
Normal file
@@ -0,0 +1,31 @@
|
||||
## SDK Method Name Changes
|
||||
|
||||
In an effort to keep our SDK method names consistent with our conventions, we have renamed the following methods:
|
||||
|
||||
### Before and After
|
||||
|
||||
| SDK Method Name | Before | After |
|
||||
| --- | --- | --- |
|
||||
| List Tags | `client.tags.list_tags` | `client.tags.list` |
|
||||
| Export Agent | `client.agents.export_agent_serialized` | `client.agents.export` |
|
||||
| Import Agent | `client.agents.import_agent_serialized` | `client.agents.import` |
|
||||
| Modify Agent Passage | `client.agents.modify_passage` | `client.agents.passages.modify` |
|
||||
| Reset Agent Messages | `client.agents.reset_messages` | `client.agents.messages.reset` |
|
||||
| List Agent Groups | `client.agents.list_agent_groups` | `client.agents.groups.list` |
|
||||
| Reset Group Messages | `client.groups.reset_messages` | `client.groups.messages.reset` |
|
||||
| Upsert Identity Properties | `client.identities.upsert_identity_properties` | `client.identities.properties.upsert` |
|
||||
| Retrieve Source by Name | `client.sources.get_by_name` | `client.sources.retrieve_by_name` |
|
||||
| List Models | `client.models.list_llms` | `client.models.list` |
|
||||
| List Embeddings | `client.models.list_embedding_models` | `client.embeddings.list` |
|
||||
| List Agents for Block | `client.blocks.list_agents_for_block` | `client.blocks.agents.list` |
|
||||
| List Providers | `client.providers.list_providers` | `client.providers.list` |
|
||||
| Create Provider | `client.providers.create_providers` | `client.providers.create` |
|
||||
| Modify Provider | `client.providers.modify_providers` | `client.providers.modify` |
|
||||
| Delete Provider | `client.providers.delete_providers` | `client.providers.delete` |
|
||||
| List Runs | `client.runs.list_runs` | `client.runs.list` |
|
||||
| List Active Runs | `client.runs.list_active_runs` | `client.runs.list_active` |
|
||||
| Retrieve Run | `client.runs.retrieve_run` | `client.runs.retrieve` |
|
||||
| Delete Run | `client.runs.delete_run` | `client.runs.delete` |
|
||||
| List Run Messages | `client.runs.list_run_messages` | `client.runs.messages.list` |
|
||||
| List Run Steps | `client.runs.list_run_steps` | `client.runs.steps.list` |
|
||||
| Retrieve Run Usage | `client.runs.retrieve_run_usage` | `client.runs.usage.retrieve` |
|
||||
688
fern/docs.yml
Normal file
@@ -0,0 +1,688 @@
|
||||
instances:
|
||||
- url: https://letta.docs.buildwithfern.com
|
||||
custom-domain: https://docs.letta.com
|
||||
title: Letta
|
||||
|
||||
experimental:
|
||||
openapi-parser-v3: true
|
||||
|
||||
tabs:
|
||||
docs:
|
||||
display-name: Documentation
|
||||
slug: documentation
|
||||
ade:
|
||||
display-name: ADE Guide
|
||||
slug: ade
|
||||
cloud:
|
||||
display-name: Letta Cloud
|
||||
skip-slug: true
|
||||
selfhosted:
|
||||
display-name: Self-Hosting
|
||||
skip-slug: true
|
||||
ref:
|
||||
display-name: API Reference
|
||||
skip-slug: true
|
||||
cookbooks:
|
||||
display-name: Cookbooks
|
||||
icon: fa-sharp fa-light fa-books
|
||||
skip-slug: true
|
||||
github:
|
||||
display-name: GitHub
|
||||
icon: fa-brands fa-github
|
||||
href: https://github.com/letta-ai/letta
|
||||
discord:
|
||||
display-name: Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
community:
|
||||
display-name: Developer Community
|
||||
icon: fa-sharp fa-light fa-user-astronaut
|
||||
skip-slug: true
|
||||
install:
|
||||
display-name: Download
|
||||
icon: fa-sharp fa-light fa-download
|
||||
skip-slug: true
|
||||
showcase:
|
||||
display-name: Examples
|
||||
skip-slug: true
|
||||
leaderboard:
|
||||
display-name: Leaderboard
|
||||
skip-slug: true
|
||||
|
||||
|
||||
landing-page:
|
||||
page: home
|
||||
path: pages/index.mdx
|
||||
|
||||
navigation:
|
||||
- tab: docs
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: Get Started
|
||||
contents:
|
||||
- page: Letta Overview
|
||||
path: pages/getting-started/letta_platform.mdx
|
||||
- page: Quickstart
|
||||
path: pages/getting-started/quickstart.mdx
|
||||
- page: Prompts for Vibecoding
|
||||
path: pages/getting-started/prompts.mdx
|
||||
#- section: Supported Frameworks
|
||||
# contents:
|
||||
# - page: TypeScript (Node.js)
|
||||
# path: pages/getting-started/ade.mdx
|
||||
# - page: Python
|
||||
# path: pages/getting-started/ade.mdx
|
||||
# - page: Vercel AI SDK
|
||||
# path: pages/frameworks/vercel.mdx
|
||||
# - page: React
|
||||
# path: pages/frameworks/react.mdx
|
||||
# - page: Next.js
|
||||
# path: pages/frameworks/next.mdx
|
||||
# - page: Flask
|
||||
# path: pages/frameworks/flask.mdx
|
||||
# - page: Mastra
|
||||
# path: pages/frameworks/mastra.mdx
|
||||
|
||||
- section: Stateful Agents
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/agents/overview.mdx
|
||||
- section: Agent Architectures
|
||||
path: pages/agents/architectures.mdx
|
||||
contents:
|
||||
- page: MemGPT Agents
|
||||
path: pages/agents/memgpt_agents.mdx
|
||||
- page: Sleep-time Agents
|
||||
path: pages/agents/sleep_time_agents.mdx
|
||||
- page: Low-latency (voice) Agents
|
||||
path: pages/agents/low_latency_agents.mdx
|
||||
- page: ReAct Agents
|
||||
path: pages/agents/react_agents.mdx
|
||||
- page: Workflows
|
||||
path: pages/agents/workflows.mdx
|
||||
- page: Stateful Workflows
|
||||
path: pages/agents/stateful_workflows.mdx
|
||||
- page: Context Hierarchy
|
||||
path: pages/agents/context_hierarchy.mdx
|
||||
- page: Heartbeats
|
||||
path: pages/agents/heartbeats.mdx
|
||||
- section: Memory
|
||||
path: pages/agents/memory.mdx
|
||||
contents:
|
||||
- page: Memory Blocks
|
||||
path: pages/agents/memory_blocks.mdx
|
||||
- page: Agentic Context Engineering
|
||||
path: pages/agents/context_engineering.mdx
|
||||
- page: Filesystem
|
||||
path: pages/agents/filesystem.mdx
|
||||
- page: Streaming Responses
|
||||
path: pages/agents/streaming.mdx
|
||||
- page: Long-Running Executions
|
||||
path: pages/agents/long_running.mdx
|
||||
- page: JSON Mode & Structured Output
|
||||
path: pages/agents/json_mode.mdx
|
||||
- page: Human-in-the-Loop
|
||||
path: pages/agents/human_in_the_loop.mdx
|
||||
- page: Multi-Modal
|
||||
path: pages/agents/multimodal.mdx
|
||||
- section: Multi-Agent
|
||||
path: pages/agents/multiagent.mdx
|
||||
contents:
|
||||
- page: Custom Multi-Agent Tools
|
||||
path: pages/agents/multiagent_custom.mdx
|
||||
- page: Multi-Agent Shared Memory
|
||||
path: pages/agents/multiagent_memory.mdx
|
||||
- page: Groups
|
||||
path: pages/agents/groups.mdx
|
||||
- page: Multi-User (Identities)
|
||||
path: pages/agents/multiuser.mdx
|
||||
- page: Agent File (.af)
|
||||
path: pages/agents/agentfile.mdx
|
||||
- page: Scheduling
|
||||
path: pages/agents/scheduling.mdx
|
||||
- section: Voice Agents
|
||||
path: pages/voice/voice.mdx
|
||||
contents:
|
||||
- page: Connecting to LiveKit Agents
|
||||
path: pages/voice/voice_livekit.mdx
|
||||
- page: Connecting to Vapi
|
||||
path: pages/voice/voice_vapi.mdx
|
||||
|
||||
- section: Tool Use
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/agents/tools.mdx
|
||||
- page: Pre-built Tools
|
||||
path: pages/agents/prebuilt_tools.mdx
|
||||
- page: Custom Tools
|
||||
path: pages/agents/custom_tools.mdx
|
||||
- page: Tool Rules
|
||||
path: pages/agents/tool_rules.mdx
|
||||
- page: Tool Variables
|
||||
path: pages/agents/tool_variables.mdx
|
||||
- page: Composio Integration
|
||||
path: pages/agents/composio.mdx
|
||||
hidden: true
|
||||
- section: Model Context Protocol
|
||||
path: pages/mcp/overview.mdx
|
||||
contents:
|
||||
- page: Connecting Letta to MCP
|
||||
path: pages/mcp/setup.mdx
|
||||
- page: Remote (SSE/HTTP) Servers
|
||||
path: pages/mcp/sse.mdx
|
||||
- page: Local (stdio) Servers
|
||||
path: pages/mcp/stdio.mdx
|
||||
|
||||
#- section: Tool Execution
|
||||
# contents:
|
||||
# - page: Overview
|
||||
# path: pages/tool_execution/overview.mdx
|
||||
# - section: Model Context Protocol
|
||||
# contents:
|
||||
# - page: What is MCP?
|
||||
# path: pages/mcp/overview.mdx
|
||||
# - section: Connecting Letta to MCP
|
||||
# path: pages/mcp/setup.mdx
|
||||
# contents:
|
||||
# - page: Remote (SSE/HTTP) Servers
|
||||
# path: pages/mcp/sse.mdx
|
||||
# - page: Local (stdio) Servers
|
||||
# path: pages/mcp/stdio.mdx
|
||||
#- section: Deploying a Letta Server
|
||||
# contents:
|
||||
# - page: Letta Docker Image
|
||||
# path: pages/server/docker.mdx
|
||||
# - section: Connecting Model Providers
|
||||
# contents:
|
||||
# - page: OpenAI
|
||||
# path: pages/models/openai.mdx
|
||||
# - page: OpenAI proxy
|
||||
# path: pages/models/openai_proxy.mdx
|
||||
# - page: Anthropic
|
||||
# path: pages/models/anthropic.mdx
|
||||
# - page: DeepSeek
|
||||
# path: pages/models/deepseek.mdx
|
||||
# - page: AWS Bedrock
|
||||
# path: pages/models/aws_bedrock.mdx
|
||||
# - page: Groq
|
||||
# path: pages/models/groq.mdx
|
||||
# - page: xAI (Grok)
|
||||
# path: pages/models/xai.mdx
|
||||
# - page: Together
|
||||
# path: pages/models/together.mdx
|
||||
# - page: Google AI / Gemini
|
||||
# path: pages/models/google.mdx
|
||||
# - page: Google Vertex
|
||||
# path: pages/models/google_vertex.mdx
|
||||
# - page: Azure OpenAI
|
||||
# path: pages/models/azure.mdx
|
||||
# - page: Ollama
|
||||
# path: pages/models/ollama.mdx
|
||||
# - page: LM Studio
|
||||
# path: pages/models/lmstudio.mdx
|
||||
# - page: vLLM
|
||||
# path: pages/models/vllm.mdx
|
||||
# - section: Remote Hosting
|
||||
# path: pages/deployment/remote.mdx
|
||||
# contents:
|
||||
# - page: Deploy on Railway
|
||||
# path: pages/deployment/railway.mdx
|
||||
# - section: Alternate Install Methods
|
||||
# contents:
|
||||
# - page: Using pip
|
||||
# path: pages/server/pip.mdx
|
||||
# - page: Installing from Source
|
||||
# path: pages/server/source.mdx
|
||||
#- section: Agent Templates
|
||||
# contents:
|
||||
# - page: Introduction to Templates
|
||||
# path: pages/cloud/templates.mdx
|
||||
# - page: Memory Variables
|
||||
# path: pages/cloud/variables.mdx
|
||||
# - page: Versioning
|
||||
# path: pages/cloud/versions.mdx
|
||||
- section: Key Concepts
|
||||
contents:
|
||||
- page: Letta concepts
|
||||
path: pages/concepts/letta.mdx
|
||||
- page: MemGPT concepts
|
||||
path: pages/concepts/memgpt.mdx
|
||||
- section: Additional Resources
|
||||
contents:
|
||||
- page: Letta Desktop Troubleshooting
|
||||
path: pages/desktop/troubleshooting.mdx
|
||||
- page: ADE Troubleshooting
|
||||
path: pages/agent-development-environment/troubleshooting.mdx
|
||||
- tab: ade
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: ADE Guide
|
||||
contents:
|
||||
- page: ADE Overview
|
||||
path: pages/ade-guide/overview.mdx
|
||||
- section: Getting Started
|
||||
path: pages/ade-guide/setup.mdx
|
||||
contents:
|
||||
- page: Access from your browser
|
||||
icon: fa-sharp fa-light fa-browser
|
||||
path: pages/ade-guide/web.mdx
|
||||
- page: Download Letta Desktop
|
||||
icon: fa-sharp fa-light fa-download
|
||||
path: pages/desktop/install.mdx
|
||||
- section: ADE Components
|
||||
contents:
|
||||
- page: Agent Simulator
|
||||
icon: fa-sharp fa-light fa-alien-8bit
|
||||
path: pages/ade-guide/simulator.mdx
|
||||
- page: Context Window Viewer
|
||||
icon: fa-sharp fa-light fa-eye
|
||||
path: pages/ade-guide/context_window_viewer.mdx
|
||||
- page: Core Memory
|
||||
icon: fa-sharp fa-light fa-brain
|
||||
path: pages/ade-guide/core_memory.mdx
|
||||
- page: Archival Memory
|
||||
icon: fa-sharp fa-light fa-box-archive
|
||||
path: pages/ade-guide/archival_memory.mdx
|
||||
- page: Data Sources
|
||||
icon: fa-sharp fa-light fa-database
|
||||
path: pages/ade-guide/data_sources.mdx
|
||||
- page: Tools
|
||||
icon: fa-sharp fa-light fa-wrench
|
||||
path: pages/ade-guide/tools.mdx
|
||||
- page: Settings
|
||||
icon: fa-sharp fa-light fa-gear
|
||||
path: pages/ade-guide/settings.mdx
|
||||
- tab: selfhosted
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
#- page: Install Letta Desktop
|
||||
# icon: fa-sharp fa-light fa-download
|
||||
# path: pages/install.mdx
|
||||
- section: Self-Hosting
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/selfhosting/overview.mdx
|
||||
- page: Tool Execution
|
||||
path: pages/tool_execution/local_tool_execution.mdx
|
||||
- page: Tracing & Telemetry
|
||||
path: pages/deployment/telemetry.mdx
|
||||
- section: Deployment
|
||||
path: pages/deployment/remote.mdx
|
||||
contents:
|
||||
- page: Railway
|
||||
path: pages/deployment/railway.mdx
|
||||
#- page: Deploying with Docker
|
||||
# icon: fa-brands fa-docker
|
||||
# path: pages/server/docker.mdx
|
||||
#- page: Install Letta via pip
|
||||
# icon: fa-brands fa-python
|
||||
# path: pages/server/pip.mdx
|
||||
- section: Connecting Model Providers
|
||||
contents:
|
||||
- page: Supported Models
|
||||
path: pages/selfhosting/supported-models.mdx
|
||||
- page: OpenAI
|
||||
path: pages/models/openai.mdx
|
||||
- page: Anthropic
|
||||
path: pages/models/anthropic.mdx
|
||||
- page: Gemini (Google AI)
|
||||
path: pages/models/google.mdx
|
||||
- page: LM Studio
|
||||
path: pages/models/lmstudio.mdx
|
||||
- section: See More Providers
|
||||
icon: fa-sharp fa-light fa-caret-down
|
||||
contents:
|
||||
- page: OpenAI proxy
|
||||
path: pages/models/openai_proxy.mdx
|
||||
- page: DeepSeek
|
||||
path: pages/models/deepseek.mdx
|
||||
- page: AWS Bedrock
|
||||
path: pages/models/aws_bedrock.mdx
|
||||
- page: Groq
|
||||
path: pages/models/groq.mdx
|
||||
- page: xAI (Grok)
|
||||
path: pages/models/xai.mdx
|
||||
- page: Together
|
||||
path: pages/models/together.mdx
|
||||
- page: Google Vertex
|
||||
path: pages/models/google_vertex.mdx
|
||||
- page: Azure OpenAI
|
||||
path: pages/models/azure.mdx
|
||||
- page: Ollama
|
||||
path: pages/models/ollama.mdx
|
||||
- page: vLLM
|
||||
path: pages/models/vllm.mdx
|
||||
#- section: Remote Deployments
|
||||
# contents:
|
||||
# - page: Overview
|
||||
# path: pages/deployment/remote.mdx
|
||||
# - page: Example - Deploy on Railway
|
||||
# path: pages/deployment/railway.mdx
|
||||
- section: Advanced
|
||||
contents:
|
||||
#- page: Install with pip
|
||||
# path: pages/server/pip.mdx
|
||||
- page: Database Configuration
|
||||
path: pages/selfhosting/postgres.mdx
|
||||
- page: Performance
|
||||
path: pages/selfhosting/performance.mdx
|
||||
- page: pgadmin
|
||||
path: pages/selfhosting/pgadmin.mdx
|
||||
- page: Installing from Source
|
||||
path: pages/server/source.mdx
|
||||
- tab: cloud
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: Get started
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/cloud/overview.mdx
|
||||
#- page: Quickstart
|
||||
# path: pages/getting-started/quickstart_cloud.mdx
|
||||
- page: Get a Letta Cloud API key
|
||||
path: pages/cloud/api_key.mdx
|
||||
- section: Account
|
||||
contents:
|
||||
- page: Plans & Pricing
|
||||
path: pages/cloud/pricing.mdx
|
||||
# - page: Available Models
|
||||
# path: pages/cloud/models.mdx
|
||||
- page: Custom API Keys
|
||||
path: pages/cloud/api_keys.mdx
|
||||
- page: Role-Based Access Control
|
||||
path: pages/cloud/rbac.mdx
|
||||
- section: Deploying Agents
|
||||
contents:
|
||||
- page: Agent Templates Overview
|
||||
path: pages/cloud/templates.mdx
|
||||
- page: Template Versioning
|
||||
path: pages/cloud/versions.mdx
|
||||
- page: Memory Variables
|
||||
path: pages/cloud/variables.mdx
|
||||
- page: Client-Side Access Tokens
|
||||
path: pages/cloud/client-side-tokens.mdx
|
||||
# - page: Deploying via the SDK
|
||||
# path: pages/cloud/variables.mdx
|
||||
# - page: Deploying via the ADE
|
||||
# path: pages/cloud/versions.mdx
|
||||
- section: Observability
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/cloud/observability.mdx
|
||||
- page: Monitoring
|
||||
path: pages/cloud/monitoring.mdx
|
||||
- page: Responses & Tracing
|
||||
path: pages/cloud/responses.mdx
|
||||
- tab: ref
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: API Reference
|
||||
contents:
|
||||
- page: API and SDK Overview
|
||||
path: pages/api/about.mdx
|
||||
- changelog: ./changelog
|
||||
title: Changelog
|
||||
slug: changelog
|
||||
- api: API Reference
|
||||
display-errors: true
|
||||
paginated: true
|
||||
flattened: true
|
||||
snippets:
|
||||
typescript: "@letta-ai/letta-client"
|
||||
python: letta-client
|
||||
layout:
|
||||
- agents
|
||||
|
||||
- tab: showcase
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: Examples
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/cookbooks_simple.mdx
|
||||
- section: Multi-Agent
|
||||
contents:
|
||||
- page: Async Multi-Agent
|
||||
path: pages/tutorials/multiagent_async.mdx
|
||||
|
||||
- tab: leaderboard
|
||||
layout:
|
||||
- link: Chat on Discord
|
||||
icon: fa-brands fa-discord
|
||||
href: https://discord.gg/letta
|
||||
- link: Developer Forum
|
||||
icon: fa-sharp fa-light fa-comments
|
||||
href: https://forum.letta.com
|
||||
- link: DeepLearning.AI Course
|
||||
icon: fa-sharp fa-light fa-building-columns
|
||||
href: https://www.deeplearning.ai/short-courses/llms-as-operating-systems-agent-memory/?utm_campaign=memgpt-launch&utm_content=331638345&utm_medium=social&utm_source=docs&hss_channel=tw-992153930095251456
|
||||
- section: Letta Leaderboard
|
||||
contents:
|
||||
- page: Overview
|
||||
path: pages/leaderboard/overview.mdx
|
||||
# - page: Benchmark Information
|
||||
# path: pages/leaderboard/benchmarks.mdx
|
||||
- page: Contributing Results
|
||||
path: pages/leaderboard/contributing.mdx
|
||||
|
||||
|
||||
# - tab: cookbooks
|
||||
# layout:
|
||||
# - section: Cookbooks
|
||||
# path: pages/cookbooks.mdx
|
||||
# contents:
|
||||
# - section: Multi-Agent
|
||||
# contents:
|
||||
# - page: Async Multi-Agent
|
||||
# path: pages/tutorials/multiagent_async.mdx
|
||||
# - tab: community
|
||||
# layout:
|
||||
# - page: Developer Community
|
||||
# path: pages/community.mdx
|
||||
|
||||
colors:
|
||||
accent-primary:
|
||||
light: '#0707ac'
|
||||
dark: '#FF5533'
|
||||
background:
|
||||
light: '#ffffffff'
|
||||
dark: '#0d0d0d'
|
||||
card-background:
|
||||
light: '#f6f6f6ff'
|
||||
dark: '#151515'
|
||||
header-background:
|
||||
light: '#fbfbfbff'
|
||||
dark: '#000000ff'
|
||||
border:
|
||||
light: '#eef0f2ff'
|
||||
dark: '#202020'
|
||||
|
||||
css:
|
||||
- assets/styles.css
|
||||
- assets/leaderboard.css
|
||||
|
||||
js:
|
||||
- path: assets/leaderboard.js
|
||||
strategy: lazyOnload
|
||||
# strategy: afterInteractive
|
||||
|
||||
favicon: assets/favicon.png
|
||||
|
||||
logo:
|
||||
href: /
|
||||
light: assets/logo-light.svg
|
||||
dark: assets/logo-dark.svg
|
||||
|
||||
navbar-links:
|
||||
- type: github
|
||||
value: https://github.com/letta-ai/letta
|
||||
- type: filled
|
||||
text: Launch ADE
|
||||
href: https://app.letta.com
|
||||
rounded: false
|
||||
|
||||
layout:
|
||||
page-width: 1504px
|
||||
tabs-placement: header
|
||||
searchbar-placement: header
|
||||
|
||||
typography:
|
||||
bodyFont:
|
||||
name: ManropeRegularBody
|
||||
paths:
|
||||
- path: assets/fonts/manrope/Manrope-Regular.ttf
|
||||
weight: 400
|
||||
style: normal
|
||||
- path: assets/fonts/manrope/Manrope-Medium.ttf
|
||||
weight: 500 900
|
||||
style: normal
|
||||
headingsFont:
|
||||
name: RoobertMediumHeading
|
||||
path: assets/fonts/roobert/RoobertMedium.woff2
|
||||
codeFont:
|
||||
name: FiraCode
|
||||
paths:
|
||||
- path: assets/fonts/fira-code/FiraCode-Regular.ttf
|
||||
weight: 400
|
||||
style: normal
|
||||
- path: assets/fonts/fira-code/FiraCode-Medium.ttf
|
||||
weight: 500 900
|
||||
style: normal
|
||||
|
||||
redirects:
|
||||
- source: "/install"
|
||||
destination: "/guides/ade/desktop"
|
||||
- source: "/desktop"
|
||||
destination: "/guides/ade/desktop"
|
||||
- source: "/quickstart/desktop"
|
||||
destination: "/guides/ade/desktop"
|
||||
- source: "/quickstart/docker"
|
||||
destination: "/guides/selfhosting"
|
||||
- source: "/guides/server/pip"
|
||||
destination: "/guides/selfhosting"
|
||||
- source: "/quickstart/cloud"
|
||||
destination: "/cloud/quickstart"
|
||||
- source: "/guides/server/docker"
|
||||
destination: "/guides/selfhosting"
|
||||
- source: "/agent-development-environment"
|
||||
destination: "/guides/ade/overview"
|
||||
- source: "/guides/ade/usage"
|
||||
destination: "/guides/ade/overview"
|
||||
- source: "/guides/agents/mcp"
|
||||
destination: "/guides/mcp/overview"
|
||||
- source: "/guides/mcp/sse"
|
||||
destination: "/guides/mcp/remote"
|
||||
- source: "/guides/mcp/stdio"
|
||||
destination: "/guides/mcp/local"
|
||||
- source: "/guides/server/quickstart"
|
||||
destination: "/quickstart"
|
||||
- source: "/agent-development-environment/troubleshooting"
|
||||
destination: "/guides/ade/troubleshooting"
|
||||
- source: "/models/openai"
|
||||
destination: "/guides/server/providers/openai"
|
||||
- source: "/models/openai_proxy"
|
||||
destination: "/guides/server/providers/openai-proxy"
|
||||
- source: "/models/anthropic"
|
||||
destination: "/guides/server/providers/anthropic"
|
||||
- source: "/models/aws_bedrock"
|
||||
destination: "/guides/server/providers/aws_bedrock"
|
||||
- source: "/models/groq"
|
||||
destination: "/guides/server/providers/groq"
|
||||
- source: "/models/together"
|
||||
destination: "/guides/server/providers/together"
|
||||
- source: "/models/google"
|
||||
destination: "/guides/server/providers/google"
|
||||
- source: "/models/google_vertex"
|
||||
destination: "/guides/server/providers/google_vertex"
|
||||
- source: "/models/deepseek"
|
||||
destination: "/guides/server/providers/deepseek"
|
||||
- source: "/models/ollama"
|
||||
destination: "/guides/server/providers/ollama"
|
||||
- source: "/models/vllm"
|
||||
destination: "/guides/server/providers/vllm"
|
||||
- source: "/models/azure"
|
||||
destination: "/guides/server/providers/azure"
|
||||
- source: "/server/docker"
|
||||
destination: "/guides/server/docker"
|
||||
- source: "/server/pip"
|
||||
destination: "/guides/server/pip"
|
||||
- source: "/agents/tools"
|
||||
destination: "/guides/agents/tools"
|
||||
- source: "/concepts"
|
||||
destination: "/concepts/letta"
|
||||
- source: "/introduction"
|
||||
destination: "/letta-platform"
|
||||
- source: "/advanced/memory_management"
|
||||
destination: "/guides/agents/memory"
|
||||
- source: "/changelog"
|
||||
destination: "/api-reference/changelog"
|
||||
- source: "/api-changelog"
|
||||
destination: "/api-reference/changelog"
|
||||
- source: "/quickstart/cloud"
|
||||
destination: "/quickstart"
|
||||
- source: "/guides/cloud"
|
||||
destination: "/guides/cloud/overview"
|
||||
- source: "/guides/ade"
|
||||
destination: "/guides/ade/overview"
|
||||
- source: "/cloud/quickstart"
|
||||
destination: "/guides/cloud/quickstart"
|
||||
- source: "/letta-platform"
|
||||
destination: "/overview"
|
||||
- source: "/guides/agents/sleep-time-agents"
|
||||
destination: "/guides/agents/architectures/sleeptime"
|
||||
- source: "/guides/agents/sources"
|
||||
destination: "/guides/agents/filesystem"
|
||||
- source: "/guides/desktop/install"
|
||||
destination: "/guides/ade/desktop"
|
||||
- source: "/api-reference/agents/cancel-agent-run"
|
||||
destination: "/api-reference/agents/messages/cancel"
|
||||
- source: "/api-reference/messages/cancel-batch-run"
|
||||
destination: "/api-reference/batches/cancel"
|
||||
60
fern/examples/agent_config.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
# list available models
|
||||
models = client.models.list_llms()
|
||||
for model in models:
|
||||
print(f"Provider {model.model_endpoint_type} model {model.model}: {model.handle}")
|
||||
|
||||
# list available embedding models
|
||||
embedding_models = client.models.list_embedding_models()
|
||||
for model in embedding_models:
|
||||
print(f"Provider {model.handle}")
|
||||
|
||||
# openai
|
||||
openai_agent = client.agents.create(
|
||||
model="openai/gpt-4o-mini",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
# optional configuration
|
||||
context_window_limit=16000,
|
||||
embedding_chunk_size=300,
|
||||
)
|
||||
|
||||
# Azure OpenAI
|
||||
azure_openai_agent = client.agents.create(
|
||||
model="azure/gpt-4o-mini",
|
||||
embedding="azure/text-embedding-3-small",
|
||||
# optional configuration
|
||||
context_window_limit=16000,
|
||||
embedding_chunk_size=300,
|
||||
)
|
||||
|
||||
# anthropic
|
||||
anthropic_agent = client.agents.create(
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
# note: anthropic does not support embeddings so you will need another provider
|
||||
embedding="openai/text-embedding-3-small",
|
||||
# optional configuration
|
||||
context_window_limit=16000,
|
||||
embedding_chunk_size=300,
|
||||
)
|
||||
|
||||
# Groq
|
||||
groq_agent = client.agents.create(
|
||||
model="groq/llama-3.3-70b-versatile",
|
||||
# note: groq does not support embeddings so you will need another provider
|
||||
embedding="openai/text-embedding-3-small",
|
||||
# optional configuration
|
||||
context_window_limit=16000,
|
||||
embedding_chunk_size=300,
|
||||
)
|
||||
|
||||
# Ollama
|
||||
ollama_agent = client.agents.create(
|
||||
model="ollama/thewindmom/hermes-3-llama-3.1-8b:latest",
|
||||
embedding="ollama/mxbai-embed-large:latest",
|
||||
# optional configuration
|
||||
context_window_limit=16000,
|
||||
embedding_chunk_size=300,
|
||||
)
|
||||
30
fern/examples/composio_tools.py
Normal file
@@ -0,0 +1,30 @@
|
||||
"""
|
||||
Example of using composio tools in Letta
|
||||
|
||||
Make sure you set `COMPOSIO_API_KEY` environment variable or run `composio login` to authenticate with Composio.
|
||||
"""
|
||||
|
||||
from composio import Action
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
# add a composio tool
|
||||
tool = client.tools.add_composio_tool(composio_action_name=Action.GITHUB_STAR_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER.name)
|
||||
|
||||
# create an agent with the tool
|
||||
agent = client.agents.create(
|
||||
name="file_editing_agent",
|
||||
memory_blocks=[{"label": "persona", "value": "I am a helpful assistant"}],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tool_ids=[tool.id],
|
||||
)
|
||||
print("Agent tools", [tool.name for tool in agent.tools])
|
||||
|
||||
# message the agent
|
||||
response = client.agents.messages.create(
|
||||
agent_id=agent.id, messages=[{"role": "user", "content": "Star the github repo `letta` by `letta-ai`"}]
|
||||
)
|
||||
for message in response.messages:
|
||||
print(message)
|
||||
56
fern/examples/data_sources.py
Normal file
@@ -0,0 +1,56 @@
|
||||
import time
|
||||
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
# get available embedding models
|
||||
embedding_configs = client.models.list_embedding_models()
|
||||
|
||||
# clear existing sources
|
||||
if len(client.sources.list()) > 0:
|
||||
for source in client.sources.list():
|
||||
if source.name == "my_source":
|
||||
client.sources.delete(source.id)
|
||||
|
||||
# create a source
|
||||
# TODO: pass in embedding
|
||||
source = client.sources.create(name="my_source", embedding_config=embedding_configs[0])
|
||||
|
||||
# list sources
|
||||
sources = client.sources.list()
|
||||
|
||||
# write a dummy file
|
||||
with open("dummy.txt", "w") as f:
|
||||
f.write("Remember that the user is a redhead")
|
||||
|
||||
# upload a file into the source
|
||||
job = client.sources.files.upload(source_id=source.id, file=open("dummy.txt", "rb"))
|
||||
|
||||
# wait until the job is completed
|
||||
while True:
|
||||
job = client.jobs.retrieve(job.id)
|
||||
if job.status == "completed":
|
||||
break
|
||||
elif job.status == "failed":
|
||||
raise ValueError(f"Job failed: {job.metadata}")
|
||||
print(f"Job status: {job.status}")
|
||||
time.sleep(1)
|
||||
|
||||
# list files in the source
|
||||
files = client.sources.files.list(source_id=source.id)
|
||||
print(f"Files in source: {files}")
|
||||
|
||||
# list passages in the source
|
||||
passages = client.sources.passages.list(source_id=source.id)
|
||||
print(f"Passages in source: {passages}")
|
||||
|
||||
# attach the source to an agent
|
||||
agent = client.agents.create(
|
||||
name="my_agent",
|
||||
memory_blocks=[],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding=embedding_configs[0].handle,
|
||||
tags=["worker"],
|
||||
)
|
||||
client.agents.sources.attach(agent_id=agent.id, source_id=source.id)
|
||||
44
fern/examples/memory.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
agent = client.agents.create(
|
||||
name="memory_agent",
|
||||
memory_blocks=[
|
||||
{"label": "persona", "value": "I am a memory agent"},
|
||||
{"label": "human", "value": "Name: Bob", "limit": 10000},
|
||||
],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tags=["worker"],
|
||||
)
|
||||
|
||||
|
||||
# create a persisted block, which can be attached to agents
|
||||
block = client.blocks.create(
|
||||
label="organization",
|
||||
value="Organization: Letta",
|
||||
limit=4000,
|
||||
)
|
||||
|
||||
# create an agent with both a shared block and its own blocks
|
||||
shared_block_agent = client.agents.create(
|
||||
name="shared_block_agent",
|
||||
memory_blocks=[block.id],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tags=["worker"],
|
||||
)
|
||||
|
||||
# list the agents blocks
|
||||
blocks = client.agents.core_memory.list_blocks(shared_block_agent.id)
|
||||
for block in blocks:
|
||||
print(block)
|
||||
|
||||
# update the block (via ID)
|
||||
block = client.blocks.modify(block.id, limit=10000)
|
||||
|
||||
# update the block (via label)
|
||||
block = client.agents.core_memory.modify_block(
|
||||
agent_id=shared_block_agent.id, block_label="organization", value="Organization: Letta", limit=10000
|
||||
)
|
||||
53
fern/examples/simple_multiagent.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from letta_client import Letta
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
|
||||
try:
|
||||
# create a supervisor agent
|
||||
supervisor_agent = client.agents.create(
|
||||
name="supervisor_agent",
|
||||
memory_blocks=[
|
||||
{"label": "persona", "value": "I am the supervisor, and I can communicate with worker agents with the tag `worker`"}
|
||||
],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tags=["supervisor"],
|
||||
tools=["send_message_to_agents_matching_all_tags"],
|
||||
)
|
||||
print(f"Created agent {supervisor_agent.name} with ID {supervisor_agent.id}")
|
||||
|
||||
def get_name() -> str:
|
||||
"""Get the name of the worker agent."""
|
||||
return "Bob"
|
||||
|
||||
tool = client.tools.upsert_from_function(func=get_name)
|
||||
print(f"Created tool {tool.name} with ID {tool.id}")
|
||||
|
||||
# create a worker agent
|
||||
worker_agent = client.agents.create(
|
||||
name="worker_agent",
|
||||
memory_blocks=[{"label": "persona", "value": f"I am the worker, my supervisor agent has ID {supervisor_agent.id}"}],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tool_ids=[tool.id],
|
||||
tags=["worker"],
|
||||
tools=["send_message_to_agents_matching_all_tags"],
|
||||
)
|
||||
print(f"Created agent {worker_agent.name} with ID {worker_agent.id}")
|
||||
|
||||
# send a message to the supervisor agent
|
||||
response = client.agents.messages.create(
|
||||
agent_id=worker_agent.id,
|
||||
messages=[{"role": "user", "content": "Ask the worker agents what their name is, then tell me with send_message"}],
|
||||
)
|
||||
print(response.messages)
|
||||
print(response.usage)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
# cleanup
|
||||
agents = client.agents.list(tags=["worker", "supervisor"])
|
||||
for agent in agents:
|
||||
client.agents.delete(agent.id)
|
||||
print(f"Deleted agent {agent.name} with ID {agent.id}")
|
||||
34
fern/examples/tool_rules.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
This example shows how to create agents with tool rules, which restrict
|
||||
what tool the agent can execute at a given step.
|
||||
|
||||
Note that by default, agents can execute any tool. As agents become more
|
||||
powerful, they will not need as much guidance from the developer.
|
||||
|
||||
Last tested with letta-client version: 0.1.22
|
||||
"""
|
||||
|
||||
from letta_client import ChildToolRule, InitToolRule, Letta, TerminalToolRule
|
||||
|
||||
client = Letta(base_url="http://localhost:8283")
|
||||
|
||||
# always search archival memory first
|
||||
search_agent = client.agents.create(
|
||||
name="search_agent",
|
||||
memory_blocks=[],
|
||||
model="anthropic/claude-3-5-sonnet-20241022",
|
||||
embedding="openai/text-embedding-3-small",
|
||||
tags=["worker"],
|
||||
tool_rules=[
|
||||
InitToolRule(tool_name="archival_memory_search"),
|
||||
ChildToolRule(tool_name="archival_memory_search", children=["send_message"]),
|
||||
# TerminalToolRule(tool_name="send_message", type="TerminalToolRule"),
|
||||
TerminalToolRule(tool_name="send_message"),
|
||||
],
|
||||
)
|
||||
response = client.agents.messages.create(
|
||||
agent_id=search_agent.id,
|
||||
messages=[{"role": "user", "content": "do something"}],
|
||||
)
|
||||
for message in response.messages:
|
||||
print(message)
|
||||
4
fern/fern.config.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"organization": "letta",
|
||||
"version": "0.65.37"
|
||||
}
|
||||
53
fern/generators.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
auth-schemes:
|
||||
token:
|
||||
header: Authorization
|
||||
prefix: Bearer
|
||||
type: optional<string>
|
||||
api:
|
||||
auth: token
|
||||
headers:
|
||||
X-Project:
|
||||
type: optional<string>
|
||||
name: project
|
||||
specs:
|
||||
- openapi: openapi.json
|
||||
overrides: openapi-overrides.yml
|
||||
settings:
|
||||
title-as-schema-name: false
|
||||
prefer-undiscriminated-unions-with-literals: true
|
||||
groups:
|
||||
python-sdk:
|
||||
generators:
|
||||
- name: fernapi/fern-python-sdk
|
||||
version: 4.25.6
|
||||
output:
|
||||
location: pypi
|
||||
package-name: letta-client
|
||||
token: ${PYPI_TOKEN}
|
||||
github:
|
||||
repository: letta-ai/letta-python
|
||||
config:
|
||||
package_name: letta_client
|
||||
pydantic_config:
|
||||
skip_validation: true
|
||||
client:
|
||||
class_name: LettaBase
|
||||
filename: base_client.py
|
||||
exported_class_name: Letta
|
||||
exported_filename: client.py
|
||||
ts-sdk:
|
||||
generators:
|
||||
- name: fernapi/fern-typescript-node-sdk
|
||||
version: 0.51.7
|
||||
output:
|
||||
location: npm
|
||||
package-name: "@letta-ai/letta-client"
|
||||
token: ${NPM_TOKEN}
|
||||
github:
|
||||
repository: "letta-ai/letta-node"
|
||||
config:
|
||||
namespaceExport: Letta
|
||||
allowCustomFetcher: true
|
||||
skipResponseValidation: true
|
||||
includeApiReference: true
|
||||
smart-casing: true
|
||||
BIN
fern/images/ade-mm-dark.png
Normal file
|
After Width: | Height: | Size: 323 KiB |
BIN
fern/images/ade-mm.png
Normal file
|
After Width: | Height: | Size: 332 KiB |
BIN
fern/images/ade_mcp.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
fern/images/ade_screenshot_chat.png
Normal file
|
After Width: | Height: | Size: 876 KiB |
BIN
fern/images/ade_screenshot_chat_light.png
Normal file
|
After Width: | Height: | Size: 864 KiB |
BIN
fern/images/ade_screenshot_tool_debugger.png
Normal file
|
After Width: | Height: | Size: 814 KiB |
BIN
fern/images/ade_screenshot_tool_debugger_light.png
Normal file
|
After Width: | Height: | Size: 820 KiB |
BIN
fern/images/avatar_c_lowlatency.png
Normal file
|
After Width: | Height: | Size: 609 KiB |
BIN
fern/images/avatar_c_lowlatency_b.png
Normal file
|
After Width: | Height: | Size: 413 KiB |
BIN
fern/images/avatar_c_memgpt.png
Normal file
|
After Width: | Height: | Size: 640 KiB |
BIN
fern/images/avatar_c_memgpt_b.png
Normal file
|
After Width: | Height: | Size: 381 KiB |
BIN
fern/images/avatar_c_react.png
Normal file
|
After Width: | Height: | Size: 612 KiB |
BIN
fern/images/avatar_c_react_b.png
Normal file
|
After Width: | Height: | Size: 437 KiB |
BIN
fern/images/avatar_c_sleeptime.png
Normal file
|
After Width: | Height: | Size: 782 KiB |
BIN
fern/images/avatar_c_sleeptime_b.png
Normal file
|
After Width: | Height: | Size: 559 KiB |
BIN
fern/images/avatar_c_sworkflow.png
Normal file
|
After Width: | Height: | Size: 548 KiB |
BIN
fern/images/avatar_c_sworkflow_b.png
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
fern/images/avatar_c_workflow.png
Normal file
|
After Width: | Height: | Size: 513 KiB |
BIN
fern/images/avatar_c_workflow_b.png
Normal file
|
After Width: | Height: | Size: 367 KiB |
BIN
fern/images/avatar_lowlatency.png
Normal file
|
After Width: | Height: | Size: 604 KiB |
BIN
fern/images/avatar_lowlatency_b.png
Normal file
|
After Width: | Height: | Size: 409 KiB |
BIN
fern/images/avatar_memgpt.png
Normal file
|
After Width: | Height: | Size: 641 KiB |
BIN
fern/images/avatar_memgpt_b.png
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
fern/images/avatar_react.png
Normal file
|
After Width: | Height: | Size: 611 KiB |
BIN
fern/images/avatar_react_b.png
Normal file
|
After Width: | Height: | Size: 436 KiB |
BIN
fern/images/avatar_sleeptime.png
Normal file
|
After Width: | Height: | Size: 776 KiB |
BIN
fern/images/avatar_sleeptime_b.png
Normal file
|
After Width: | Height: | Size: 556 KiB |
BIN
fern/images/avatar_sworkflow.png
Normal file
|
After Width: | Height: | Size: 544 KiB |
BIN
fern/images/avatar_sworkflow_b.png
Normal file
|
After Width: | Height: | Size: 376 KiB |
BIN
fern/images/avatar_workflow.png
Normal file
|
After Width: | Height: | Size: 510 KiB |
BIN
fern/images/avatar_workflow_b.png
Normal file
|
After Width: | Height: | Size: 366 KiB |
BIN
fern/images/checks-passed.png
Normal file
|
After Width: | Height: | Size: 157 KiB |
BIN
fern/images/clickhouse_config.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
fern/images/dlai_course_screenshot.png
Normal file
|
After Width: | Height: | Size: 971 KiB |
BIN
fern/images/dlai_source_screenshot_wide.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
fern/images/env_vars_button.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
161
fern/images/hero-dark.svg
Normal file
@@ -0,0 +1,161 @@
|
||||
<svg width="700" height="320" viewBox="0 0 700 320" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2862_30)">
|
||||
<rect width="700" height="320" rx="16" fill="url(#paint0_linear_2862_30)"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="white"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint1_radial_2862_30)"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="black" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint2_linear_2862_30)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M311.72 247.034C283.108 246.887 258.409 231.208 246.538 201.531C234.656 171.825 238.271 134.702 253.583 101.377C282.195 101.524 306.894 117.203 318.765 146.88C330.647 176.586 327.031 213.709 311.72 247.034Z" stroke="url(#paint3_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="white"/>
|
||||
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="url(#paint4_radial_2862_30)"/>
|
||||
<path d="M393.341 171.537C376.971 210.369 343.89 237.091 305.969 246.867C286.462 212.959 282.476 170.663 298.845 131.831C315.215 92.9978 348.295 66.2765 386.217 56.5004C405.724 90.4077 409.71 132.704 393.341 171.537Z" stroke="url(#paint5_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="white"/>
|
||||
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint6_radial_2862_30)"/>
|
||||
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="black" fill-opacity="0.2" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint7_linear_2862_30)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M393.586 261.878C362.034 272.529 329.98 265.88 306.002 246.907C317.534 215.919 341.57 190.327 373.13 179.673C404.681 169.023 436.735 175.671 460.714 194.644C449.181 225.632 425.145 251.224 393.586 261.878Z" stroke="url(#paint8_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<g opacity="0.8" filter="url(#filter0_f_2862_30)">
|
||||
<circle cx="660" cy="-60" r="160" fill="#18E244" fill-opacity="0.4"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter1_f_2862_30)">
|
||||
<circle cx="20" cy="213" r="160" fill="#18CAE2" fill-opacity="0.33"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter2_f_2862_30)">
|
||||
<circle cx="660" cy="480" r="160" fill="#18E2B2" fill-opacity="0.52"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter3_f_2862_30)">
|
||||
<circle cx="20" cy="413" r="160" fill="#4018E2" fill-opacity="0.22"/>
|
||||
</g>
|
||||
<path opacity="0.2" d="M0 50H700" stroke="url(#paint9_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.1" d="M0 82H700" stroke="url(#paint10_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.2" d="M239 0L239 320" stroke="url(#paint11_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.1" d="M271 0L271 320" stroke="url(#paint12_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.2" d="M461 0L461 320" stroke="url(#paint13_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.1" d="M429 0L429 320" stroke="url(#paint14_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.2" d="M0 271H700" stroke="url(#paint15_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<path opacity="0.1" d="M0 239H700" stroke="url(#paint16_radial_2862_30)" stroke-dasharray="4 4"/>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 160H700" stroke="url(#paint17_linear_2862_30)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.2">
|
||||
<path d="M511 -1L189 321" stroke="url(#paint18_linear_2862_30)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.2">
|
||||
<path d="M511 321L189 -1" stroke="url(#paint19_linear_2862_30)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<circle cx="350" cy="160" r="111" stroke="white"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<circle cx="350" cy="160" r="79" stroke="white"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_2862_30" x="260" y="-460" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_2862_30" x="-380" y="-187" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
|
||||
</filter>
|
||||
<filter id="filter2_f_2862_30" x="260" y="80" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
|
||||
</filter>
|
||||
<filter id="filter3_f_2862_30" x="-380" y="13" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_2862_30" x1="1.04308e-05" y1="320" x2="710.784" y2="26.0793" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#18E299" stop-opacity="0.09"/>
|
||||
<stop offset="0.729167" stop-color="#0D9373" stop-opacity="0.08"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint1_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(208.697 189.703) rotate(-10.029) scale(169.097 167.466)">
|
||||
<stop stop-color="#00B0BB"/>
|
||||
<stop offset="1" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint2_linear_2862_30" x1="306.587" y1="93.5598" x2="252.341" y2="224.228" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#18E299"/>
|
||||
<stop offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_2862_30" x1="311.84" y1="123.717" x2="253.579" y2="224.761" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint4_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(313.407 243.64) rotate(-75.7542) scale(203.632 223.902)">
|
||||
<stop stop-color="#00BBBB"/>
|
||||
<stop offset="0.712616" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint5_linear_2862_30" x1="308.586" y1="102.284" x2="383.487" y2="201.169" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint6_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(311.446 249.925) rotate(-20.3524) scale(174.776 163.096)">
|
||||
<stop stop-color="#00B0BB"/>
|
||||
<stop offset="1" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint7_linear_2862_30" x1="395.842" y1="169.781" x2="332.121" y2="263.82" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#00B1BC"/>
|
||||
<stop offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_2862_30" x1="395.842" y1="169.781" x2="370.99" y2="271.799" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint9_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 50) scale(398.125 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint10_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 82) scale(398.125 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint11_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(239 160) rotate(90) scale(182 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint12_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(271 160) rotate(90) scale(182 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint13_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(461 160) rotate(90) scale(182 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint14_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(429 160) rotate(90) scale(182 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint15_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 271) scale(398.125 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint16_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 239) scale(398.125 182)">
|
||||
<stop offset="0.348958" stop-color="#84FFD3"/>
|
||||
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint17_linear_2862_30" x1="0" y1="160" x2="700" y2="160" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" stop-opacity="0.1"/>
|
||||
<stop offset="0.5" stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint18_linear_2862_30" x1="511" y1="-1" x2="189" y2="321" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" stop-opacity="0.1"/>
|
||||
<stop offset="0.5" stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint19_linear_2862_30" x1="511" y1="321" x2="189" y2="-0.999997" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" stop-opacity="0.1"/>
|
||||
<stop offset="0.5" stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_2862_30">
|
||||
<rect width="700" height="320" rx="16" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
155
fern/images/hero-light.svg
Normal file
@@ -0,0 +1,155 @@
|
||||
<svg width="700" height="320" viewBox="0 0 700 320" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2862_278)">
|
||||
<rect width="700" height="320" rx="16" fill="url(#paint0_linear_2862_278)"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="white"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint1_radial_2862_278)"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="black" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint2_linear_2862_278)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M311.72 247.034C283.108 246.887 258.409 231.208 246.538 201.531C234.656 171.825 238.271 134.702 253.583 101.377C282.195 101.524 306.894 117.203 318.765 146.88C330.647 176.586 327.031 213.709 311.72 247.034Z" stroke="url(#paint3_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="white"/>
|
||||
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="url(#paint4_radial_2862_278)"/>
|
||||
<path d="M393.341 171.537C376.971 210.369 343.89 237.091 305.969 246.867C286.462 212.959 282.476 170.663 298.845 131.831C315.215 92.9978 348.295 66.2765 386.217 56.5004C405.724 90.4077 409.71 132.704 393.341 171.537Z" stroke="url(#paint5_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="white"/>
|
||||
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint6_radial_2862_278)"/>
|
||||
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="black" fill-opacity="0.2" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint7_linear_2862_278)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
|
||||
<path d="M393.586 261.878C362.035 272.529 329.981 265.88 306.002 246.907C317.535 215.919 341.571 190.327 373.13 179.673C404.682 169.023 436.736 175.671 460.715 194.644C449.182 225.632 425.146 251.224 393.586 261.878Z" stroke="url(#paint8_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
|
||||
<g opacity="0.8" filter="url(#filter0_f_2862_278)">
|
||||
<circle cx="660" cy="-60" r="160" fill="#18E299" fill-opacity="0.4"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter1_f_2862_278)">
|
||||
<circle cx="20" cy="213" r="160" fill="#18E299" fill-opacity="0.33"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter2_f_2862_278)">
|
||||
<circle cx="660" cy="480" r="160" fill="#18E299" fill-opacity="0.52"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter3_f_2862_278)">
|
||||
<circle cx="20" cy="413" r="160" fill="#18E299" fill-opacity="0.22"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 50H700" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 82H700" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M239 0L239 320" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M271 0L271 320" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M461 0L461 320" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M350 0L350 320" stroke="url(#paint9_linear_2862_278)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M429 0L429 320" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 271H700" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 239H700" stroke="black" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M0 160H700" stroke="url(#paint10_linear_2862_278)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M511 -1L189 321" stroke="url(#paint11_linear_2862_278)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.1">
|
||||
<path d="M511 321L189 -1" stroke="url(#paint12_linear_2862_278)"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.05">
|
||||
<circle cx="350" cy="160" r="111" stroke="black"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:overlay" opacity="0.05">
|
||||
<circle cx="350" cy="160" r="79" stroke="black"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_2862_278" x="260" y="-460" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_2862_278" x="-380" y="-187" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
|
||||
</filter>
|
||||
<filter id="filter2_f_2862_278" x="260" y="80" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
|
||||
</filter>
|
||||
<filter id="filter3_f_2862_278" x="-380" y="13" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_2862_278" x1="1.04308e-05" y1="320" x2="710.784" y2="26.0793" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#18E299" stop-opacity="0.09"/>
|
||||
<stop offset="0.729167" stop-color="#0D9373" stop-opacity="0.08"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint1_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(208.697 189.703) rotate(-10.029) scale(169.097 167.466)">
|
||||
<stop stop-color="#00B0BB"/>
|
||||
<stop offset="1" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint2_linear_2862_278" x1="306.587" y1="93.5598" x2="252.341" y2="224.228" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#18E299"/>
|
||||
<stop offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_2862_278" x1="311.84" y1="123.717" x2="253.579" y2="224.761" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint4_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(313.407 243.64) rotate(-75.7542) scale(203.632 223.902)">
|
||||
<stop stop-color="#00BBBB"/>
|
||||
<stop offset="0.712616" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint5_linear_2862_278" x1="308.586" y1="102.284" x2="383.487" y2="201.169" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint6_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(311.447 249.925) rotate(-20.3524) scale(174.776 163.096)">
|
||||
<stop stop-color="#00B0BB"/>
|
||||
<stop offset="1" stop-color="#00DB65"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint7_linear_2862_278" x1="395.843" y1="169.781" x2="332.121" y2="263.82" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#00B1BC"/>
|
||||
<stop offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_2862_278" x1="395.843" y1="169.781" x2="370.991" y2="271.799" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_2862_278" x1="350" y1="0" x2="350" y2="320" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-opacity="0"/>
|
||||
<stop offset="0.0001" stop-opacity="0.3"/>
|
||||
<stop offset="0.333333"/>
|
||||
<stop offset="0.666667"/>
|
||||
<stop offset="1" stop-opacity="0.3"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint10_linear_2862_278" x1="0" y1="160" x2="700" y2="160" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-opacity="0.1"/>
|
||||
<stop offset="0.5"/>
|
||||
<stop offset="1" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint11_linear_2862_278" x1="511" y1="-1" x2="189" y2="321" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-opacity="0.1"/>
|
||||
<stop offset="0.5"/>
|
||||
<stop offset="1" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint12_linear_2862_278" x1="511" y1="321" x2="189" y2="-0.999997" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-opacity="0.1"/>
|
||||
<stop offset="0.5"/>
|
||||
<stop offset="1" stop-opacity="0.1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_2862_278">
|
||||
<rect width="700" height="320" rx="16" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
88
fern/images/hero/letta-hero-bg-dark.svg
Normal file
@@ -0,0 +1,88 @@
|
||||
<svg width="1666" height="1031" viewBox="0 0 1666 1031" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M900.29 1029.82C1249.26 1029.82 1532.16 859.523 1532.16 649.45C1532.16 439.377 1249.26 269.08 900.29 269.08C551.318 269.08 268.42 439.377 268.42 649.45C268.42 859.523 551.318 1029.82 900.29 1029.82Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 1013.79C1132.4 1013.79 1320.57 902.488 1320.57 765.19C1320.57 627.892 1132.4 516.59 900.29 516.59C668.176 516.59 480.01 627.892 480.01 765.19C480.01 902.488 668.176 1013.79 900.29 1013.79Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 581C1022.8 581 1122.11 516.735 1122.11 437.46C1122.11 358.185 1022.8 293.92 900.29 293.92C777.782 293.92 678.47 358.185 678.47 437.46C678.47 516.735 777.782 581 900.29 581Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 997.63C1022.8 997.63 1122.11 936.781 1122.11 861.72C1122.11 786.659 1022.8 725.81 900.29 725.81C777.782 725.81 678.47 786.659 678.47 861.72C678.47 936.781 777.782 997.63 900.29 997.63Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1239.23 579L1239.19 592.26C1239.33 541.7 1205.96 491.05 1139.14 452.48C1006.35 375.82 791.76 375.82 659.83 452.48C594.29 490.57 561.48 540.41 561.34 590.33L561.38 577.07C561.52 527.15 594.33 477.31 659.87 439.22C791.8 362.55 1006.4 362.55 1139.18 439.22C1206 477.8 1239.37 528.44 1239.23 579Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1156.36 429.23C1298.7 511.41 1299.44 644.65 1158.03 726.83C1016.62 809.01 786.59 809.01 644.26 726.83C501.92 644.65 501.17 511.41 642.58 429.23C783.99 347.05 1014.02 347.05 1156.36 429.23ZM661.43 716.85C794.22 793.51 1008.81 793.51 1140.74 716.85C1272.67 640.18 1271.97 515.88 1139.18 439.21C1006.39 362.55 791.8 362.55 659.87 439.21C527.94 515.88 528.64 640.18 661.43 716.85Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1263.6 579.07L1263.56 592.33C1263.41 645.84 1228.24 699.27 1157.99 740.09C1016.58 822.27 786.55 822.27 644.22 740.09C572.59 698.74 536.82 644.45 536.97 590.25L537.01 576.99C536.86 631.19 572.63 685.47 644.26 726.83C786.6 809.01 1016.62 809.01 1158.03 726.83C1228.28 686 1263.45 632.57 1263.6 579.07Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M919.03 371.73L918.05 423.08L891.14 422.85L892.12 371.51L919.03 371.73Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M919.03 371.73L918.91 411.52L917.94 462.87L918.05 423.08L919.03 371.73Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M918.05 423.08L917.94 462.87L891.03 462.64L891.14 422.85L918.05 423.08Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M814.12 378.81L843.52 427.31L818.13 432.43L788.73 383.94L814.12 378.81Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M843.52 427.31L843.4 467.11L818.02 472.23L818.13 432.43L843.52 427.31Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M818.13 432.43L818.02 472.23L788.62 423.73L788.73 383.94L818.13 432.43Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M719.84 406.26L776.06 446.07L755.26 455.91L699.03 416.11L719.84 406.26Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M776.06 446.07L775.95 485.86L755.15 495.7L755.26 455.91L776.06 446.07Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M755.26 455.91L755.15 495.7L698.92 455.9L699.03 416.11L755.26 455.91Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M693.11 516.59L688.14 531.9L601.02 522.26L605.98 506.95L693.11 516.59Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M693.11 516.59L693 556.38L688.03 571.69L688.14 531.9L693.11 516.59Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M688.14 531.9L688.03 571.69L600.91 562.05L601.02 522.26L688.14 531.9Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M687.61 559.86L691.99 575.24L604.53 583.44L600.15 568.05L687.61 559.86Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M691.99 575.24L691.88 615.03L604.41 623.23L604.53 583.44L691.99 575.24Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M604.53 583.44L604.41 623.23L600.03 607.84L600.15 568.05L604.53 583.44Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M708 601.65L721.2 615.26L643.94 640.29L630.74 626.69L708 601.65Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M721.2 615.26L721.08 655.05L643.83 680.09L643.94 640.29L721.2 615.26Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M643.94 640.29L643.83 680.09L630.63 666.48L630.74 626.69L643.94 640.29Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1021.91 385.87L990.67 433.86L965.49 428.32L996.72 380.33L1021.91 385.87Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1021.91 385.87L1021.8 425.66L990.56 473.65L990.67 433.86L1021.91 385.87Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M990.67 433.86L990.56 473.65L965.37 468.11L965.49 428.32L990.67 433.86Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1110.35 419.52L1052.63 458.37L1032.2 448.19L1089.93 409.33L1110.35 419.52Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1110.35 419.52L1110.24 459.31L1052.51 498.17L1052.63 458.37L1110.35 419.52Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1052.63 458.37L1052.51 498.17L1032.09 487.98L1032.2 448.19L1052.63 458.37Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M772.23 647.12L714.51 685.98L694.08 675.79L751.81 636.93L772.23 647.12Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M772.23 647.12L772.12 686.91L714.39 725.77L714.51 685.98L772.23 647.12Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M714.51 685.98L714.39 725.77L693.97 715.58L694.08 675.79L714.51 685.98Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M838.95 666.98L807.71 714.98L782.53 709.44L813.76 661.44L838.95 666.98Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M838.95 666.98L838.84 706.77L807.6 754.77L807.71 714.98L838.95 666.98Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M807.71 714.98L807.6 754.77L782.41 749.23L782.53 709.44L807.71 714.98Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1199.91 511.87L1204.29 527.26L1116.83 535.45L1112.45 520.06L1199.91 511.87Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1204.29 527.26L1204.18 567.05L1116.71 575.24L1116.83 535.45L1204.29 527.26Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1116.83 535.45L1116.71 575.24L1112.33 559.85L1112.45 520.06L1116.83 535.45Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1203.42 573.04L1198.45 588.35L1111.33 578.71L1116.29 563.4L1203.42 573.04Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1203.42 573.04L1203.31 612.83L1198.34 628.14L1198.45 588.35L1203.42 573.04Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1198.45 588.35L1198.34 628.14L1111.21 618.5L1111.33 578.71L1198.45 588.35Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1170.6 631.15L1156.88 644.54L1080.61 618.23L1094.32 604.85L1170.6 631.15Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1170.6 631.15L1170.49 670.94L1156.77 684.33L1156.88 644.54L1170.6 631.15Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1156.88 644.54L1156.77 684.33L1080.49 658.02L1080.61 618.23L1156.88 644.54Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1049.18 639.39L1105.41 679.19L1084.6 689.04L1028.37 649.24L1049.18 639.39Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1105.41 679.19L1105.29 718.98L1084.49 728.83L1084.6 689.04L1105.41 679.19Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1084.6 689.04L1084.49 728.83L1028.26 689.03L1028.37 649.24L1084.6 689.04Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M986.31 662.87L1015.71 711.37L990.32 716.49L960.92 667.99L986.31 662.87Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1015.71 711.37L1015.59 751.16L990.2 756.28L990.32 716.49L1015.71 711.37Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M990.32 716.49L990.2 756.28L960.81 707.78L960.92 667.99L990.32 716.49Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1013.1 546.16L1013.06 559.42C1013.11 542.59 1002 525.74 979.76 512.9C935.57 487.39 864.16 487.39 820.25 512.9C798.44 525.57 787.52 542.16 787.47 558.77L787.51 545.51C787.56 528.9 798.47 512.31 820.29 499.64C864.19 474.13 935.61 474.13 979.8 499.64C1002.04 512.48 1013.14 529.33 1013.1 546.16Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1022.65 474.74C1090.66 514 1091.01 577.66 1023.45 616.93C955.88 656.19 845.98 656.2 777.98 616.93C709.97 577.67 709.61 514.01 777.18 474.74C844.74 435.48 954.65 435.47 1022.65 474.74ZM820.82 592.03C865.01 617.54 936.42 617.54 980.33 592.03C1024.23 566.52 1024 525.15 979.81 499.64C935.62 474.13 864.21 474.13 820.3 499.64C776.4 525.15 776.63 566.52 820.82 592.03Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1073.89 546.33L1073.85 559.59C1073.78 585.16 1056.98 610.68 1023.41 630.19C955.84 669.45 845.94 669.46 777.94 630.19C743.72 610.43 726.63 584.5 726.7 558.6L726.74 545.34C726.67 571.24 743.76 597.17 777.98 616.93C845.99 656.19 955.89 656.19 1023.45 616.93C1057.01 597.42 1073.82 571.9 1073.89 546.33Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M953.35 489.09L953.24 528.88C953.22 536.72 948.06 544.55 937.77 550.53C917.05 562.57 883.34 562.57 862.48 550.53C851.99 544.47 846.74 536.52 846.77 528.58L846.88 488.79C846.86 496.73 852.1 504.68 862.59 510.74C883.45 522.78 917.16 522.78 937.88 510.74C948.17 504.76 953.33 496.93 953.35 489.09Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M937.63 467.14C958.49 479.18 958.6 498.71 937.88 510.75C917.16 522.79 883.45 522.79 862.59 510.75C841.73 498.71 841.63 479.18 862.35 467.14C883.07 455.1 916.78 455.1 937.63 467.14Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 827.53C1132.4 827.53 1320.57 705.769 1320.57 555.57C1320.57 405.371 1132.4 283.61 900.29 283.61C668.176 283.61 480.01 405.371 480.01 555.57C480.01 705.769 668.176 827.53 900.29 827.53Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 935.63C1196.82 935.63 1437.2 788.35 1437.2 606.67C1437.2 424.99 1196.82 277.71 900.29 277.71C603.763 277.71 363.38 424.99 363.38 606.67C363.38 788.35 603.763 935.63 900.29 935.63Z" stroke="#C9CDD1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1157.37 397.29H1005.5" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1005.61 399.55C1006.86 399.55 1007.87 398.538 1007.87 397.29C1007.87 396.042 1006.86 395.03 1005.61 395.03C1004.36 395.03 1003.35 396.042 1003.35 397.29C1003.35 398.538 1004.36 399.55 1005.61 399.55Z" fill="#C9CDD1"/>
|
||||
<path d="M1073.89 287.78L1073.85 301.04C1073.78 326.61 1056.98 352.13 1023.41 371.64C955.84 410.9 845.94 410.91 777.94 371.64C743.72 351.88 726.63 325.95 726.7 300.05L726.74 286.79C726.67 312.69 743.76 338.62 777.98 358.38C845.99 397.64 955.89 397.64 1023.45 358.38C1057.01 338.87 1073.82 313.35 1073.89 287.78Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1022.65 216.19C1090.66 255.45 1091.01 319.11 1023.45 358.38C955.88 397.64 845.98 397.65 777.98 358.38C709.97 319.12 709.61 255.46 777.18 216.19C844.74 176.93 954.65 176.92 1022.65 216.19Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1052.51 267.53L1052.48 279.16C1052.42 301.58 1037.68 323.96 1008.25 341.07C949 375.5 852.63 375.5 793 341.07C762.99 323.74 748 301 748.07 278.29L748.1 266.66C748.04 289.37 763.02 312.11 793.03 329.44C852.66 363.87 949.03 363.87 1008.28 329.44C1037.71 312.34 1052.45 289.95 1052.51 267.53Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1007.58 204.76C1067.21 239.19 1067.53 295.01 1008.28 329.44C949.03 363.87 852.66 363.87 793.03 329.44C733.4 295.01 733.08 239.19 792.33 204.76C851.57 170.33 947.95 170.33 1007.58 204.76Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 587.21V493.96" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M902.55 494.08C902.55 492.83 901.54 491.82 900.29 491.82C899.04 491.82 898.03 492.83 898.03 494.08C898.03 495.33 899.04 496.34 900.29 496.34C901.54 496.34 902.55 495.33 902.55 494.08Z" fill="#C9CDD1"/>
|
||||
<path d="M1422.45 377.03H1154.83V417.56H1422.45V377.03Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M978.03 572H822.6V612.53H978.03V572Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 88.72V250.28" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M901.158 252.257C902.311 251.78 902.859 250.458 902.381 249.305C901.903 248.151 900.581 247.604 899.428 248.081C898.275 248.559 897.728 249.881 898.205 251.034C898.683 252.187 900.005 252.735 901.158 252.257Z" fill="#C9CDD1"/>
|
||||
<path d="M1034.1 57H766.48V97.53H1034.1V57Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M859.507 85.4102L865.007 71.4102H866.927L872.427 85.4102H870.267L868.927 81.8502H863.007L861.667 85.4102H859.507ZM863.687 80.0302H868.247L865.967 74.0102L863.687 80.0302ZM880.481 85.5702C877.081 85.5702 873.901 83.1702 873.901 78.4102C873.901 73.6502 877.101 71.2502 880.761 71.2502C884.101 71.2502 886.581 73.1702 886.881 75.9502H884.641C884.341 74.2302 882.841 73.0902 880.741 73.0902C878.041 73.0902 876.021 75.0102 876.021 78.4102C876.021 81.8902 878.041 83.7302 880.761 83.7302C883.021 83.7302 884.821 82.4302 884.821 80.8102C884.821 80.1302 884.501 79.7702 883.861 79.7702H880.841V78.0902H884.501C885.921 78.0902 886.821 78.9702 886.821 80.4102V85.4102H884.921V83.4302C884.261 84.5702 882.641 85.5702 880.481 85.5702ZM890.524 85.4102V71.4102H899.504V73.2502H892.604V77.2702H898.184V79.1102H892.604V83.5702H899.724V85.4102H890.524ZM903.067 85.4102V71.4102H905.387L912.127 82.1902V71.4102H914.207V85.4102H911.907L905.147 74.6502V85.4102H903.067ZM921.403 85.4102V73.2502H917.023V71.4102H927.863V73.2502H923.483V85.4102H921.403ZM934.803 85.5702C931.483 85.5702 929.583 83.6702 929.423 80.7702H931.443C931.603 82.5702 932.663 83.7302 934.803 83.7302C936.563 83.7302 937.803 83.0502 937.803 81.5302C937.803 78.0302 929.843 80.3302 929.843 75.0702C929.843 72.7902 931.823 71.2502 934.643 71.2502C937.503 71.2502 939.463 72.9102 939.643 75.4702H937.623C937.483 74.0302 936.363 73.0902 934.643 73.0902C932.963 73.0902 931.943 73.8502 931.943 75.0502C931.943 78.5702 939.923 76.0302 939.923 81.5102C939.923 84.0702 937.803 85.5702 934.803 85.5702Z" fill="#C9CDD1"/>
|
||||
<path d="M881.754 599.41V585.41H883.834V597.57H890.654V599.41H881.754ZM893.477 599.41V585.41H895.557V597.57H902.377V599.41H893.477ZM905.2 599.41V585.41H907.76L912.22 596.57L916.68 585.41H919.24V599.41H917.24V588.99L913.06 599.41H911.38L907.18 588.99V599.41H905.2Z" fill="#C9CDD1"/>
|
||||
<path d="M1259.12 405.41V393.25H1254.74V391.41H1265.58V393.25H1261.2V405.41H1259.12ZM1273.88 405.57C1269.88 405.57 1266.92 402.53 1266.92 398.41C1266.92 394.29 1269.88 391.25 1273.88 391.25C1277.86 391.25 1280.82 394.29 1280.82 398.41C1280.82 402.53 1277.86 405.57 1273.88 405.57ZM1273.86 403.73C1276.66 403.73 1278.7 401.47 1278.7 398.41C1278.7 395.35 1276.66 393.09 1273.86 393.09C1271.08 393.09 1269.04 395.35 1269.04 398.41C1269.04 401.47 1271.08 403.73 1273.86 403.73ZM1290.47 405.57C1286.47 405.57 1283.51 402.53 1283.51 398.41C1283.51 394.29 1286.47 391.25 1290.47 391.25C1294.45 391.25 1297.41 394.29 1297.41 398.41C1297.41 402.53 1294.45 405.57 1290.47 405.57ZM1290.45 403.73C1293.25 403.73 1295.29 401.47 1295.29 398.41C1295.29 395.35 1293.25 393.09 1290.45 393.09C1287.67 393.09 1285.63 395.35 1285.63 398.41C1285.63 401.47 1287.67 403.73 1290.45 403.73ZM1300.86 405.41V391.41H1302.94V403.57H1309.76V405.41H1300.86ZM1316.59 405.57C1313.27 405.57 1311.37 403.67 1311.21 400.77H1313.23C1313.39 402.57 1314.45 403.73 1316.59 403.73C1318.35 403.73 1319.59 403.05 1319.59 401.53C1319.59 398.03 1311.63 400.33 1311.63 395.07C1311.63 392.79 1313.61 391.25 1316.43 391.25C1319.29 391.25 1321.25 392.91 1321.43 395.47H1319.41C1319.27 394.03 1318.15 393.09 1316.43 393.09C1314.75 393.09 1313.73 393.85 1313.73 395.05C1313.73 398.57 1321.71 396.03 1321.71 401.51C1321.71 404.07 1319.59 405.57 1316.59 405.57Z" fill="#C9CDD1"/>
|
||||
<path d="M1404.03 608.41V594.41H1406.59L1411.05 605.57L1415.51 594.41H1418.07V608.41H1416.07V597.99L1411.89 608.41H1410.21L1406.01 597.99V608.41H1404.03ZM1422.28 608.41V594.41H1431.26V596.25H1424.36V600.27H1429.94V602.11H1424.36V606.57H1431.48V608.41H1422.28ZM1434.82 608.41V594.41H1437.38L1441.84 605.57L1446.3 594.41H1448.86V608.41H1446.86V597.99L1442.68 608.41H1441L1436.8 597.99V608.41H1434.82ZM1459.27 608.57C1455.27 608.57 1452.31 605.53 1452.31 601.41C1452.31 597.29 1455.27 594.25 1459.27 594.25C1463.25 594.25 1466.21 597.29 1466.21 601.41C1466.21 605.53 1463.25 608.57 1459.27 608.57ZM1459.25 606.73C1462.05 606.73 1464.09 604.47 1464.09 601.41C1464.09 598.35 1462.05 596.09 1459.25 596.09C1456.47 596.09 1454.43 598.35 1454.43 601.41C1454.43 604.47 1456.47 606.73 1459.25 606.73ZM1469.65 608.41V594.41H1475.13C1477.95 594.41 1479.67 595.89 1479.67 598.29C1479.67 599.99 1478.85 601.11 1477.59 601.75C1478.63 602.35 1479.27 603.47 1479.37 604.83L1479.65 608.41H1477.59L1477.31 605.01C1477.23 603.77 1476.43 602.89 1475.23 602.89H1471.73V608.41H1469.65ZM1475.07 601.05C1476.89 601.05 1477.59 599.87 1477.59 598.61C1477.59 597.33 1476.89 596.21 1475.07 596.21H1471.73V601.05H1475.07ZM1486.36 608.41V602.57L1481.46 594.41H1483.76L1487.4 600.59L1491.04 594.41H1493.34L1488.44 602.57V608.41H1486.36Z" fill="#C9CDD1"/>
|
||||
<path d="M1475.61 644.406H1388.41V731.603H1475.61V644.406Z" fill="#C9CDD1"/>
|
||||
<path d="M1562.79 529.403V470H1301.2V529.403C1301.2 544.76 1288.76 557.198 1273.4 557.198H1214V818.802H1273.4C1288.76 818.802 1301.2 831.24 1301.2 846.597V906H1562.8V846.597C1562.8 831.24 1575.24 818.802 1590.6 818.802H1650V557.198H1590.6C1575.24 557.198 1562.8 544.76 1562.8 529.403H1562.79ZM1562.79 790.996C1562.79 806.353 1550.35 818.79 1535 818.79H1328.99C1313.64 818.79 1301.2 806.353 1301.2 790.996V584.992C1301.2 569.635 1313.64 557.198 1328.99 557.198H1535C1550.35 557.198 1562.79 569.635 1562.79 584.992V790.996Z" fill="#C9CDD1"/>
|
||||
<path d="M1314.02 602.22H1175.1" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1175.21 604.48C1176.46 604.48 1177.47 603.468 1177.47 602.22C1177.47 600.972 1176.46 599.96 1175.21 599.96C1173.96 599.96 1172.95 600.972 1172.95 602.22C1172.95 603.468 1173.96 604.48 1175.21 604.48Z" fill="#C9CDD1"/>
|
||||
<path d="M485.98 602.22H630.47" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M630.36 604.47C631.61 604.47 632.62 603.46 632.62 602.21C632.62 600.96 631.61 599.95 630.36 599.95C629.11 599.95 628.1 600.96 628.1 602.21C628.1 603.46 629.11 604.47 630.36 604.47Z" fill="#C9CDD1"/>
|
||||
<path d="M485.98 581.95H218.36V622.48H485.98V581.95Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1581.64 580.33H1314.02V620.86H1581.64V580.33Z" stroke="#C9CDD1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M257.811 610.41V596.41H263.231C266.111 596.41 267.811 598.15 267.811 600.63C267.811 603.11 266.111 604.85 263.231 604.85H259.891V610.41H257.811ZM263.171 603.05C264.971 603.05 265.671 601.91 265.671 600.63C265.671 599.35 264.971 598.21 263.171 598.21H259.891V603.05H263.171ZM270.862 610.41V596.41H279.842V598.25H272.942V602.27H278.522V604.11H272.942V608.57H280.062V610.41H270.862ZM283.405 610.41V596.41H288.885C291.705 596.41 293.425 597.89 293.425 600.29C293.425 601.99 292.605 603.11 291.345 603.75C292.385 604.35 293.025 605.47 293.125 606.83L293.405 610.41H291.345L291.065 607.01C290.985 605.77 290.185 604.89 288.985 604.89H285.485V610.41H283.405ZM288.825 603.05C290.645 603.05 291.345 601.87 291.345 600.61C291.345 599.33 290.645 598.21 288.825 598.21H285.485V603.05H288.825ZM301.699 610.57C298.379 610.57 296.479 608.67 296.319 605.77H298.339C298.499 607.57 299.559 608.73 301.699 608.73C303.459 608.73 304.699 608.05 304.699 606.53C304.699 603.03 296.739 605.33 296.739 600.07C296.739 597.79 298.719 596.25 301.539 596.25C304.399 596.25 306.359 597.91 306.539 600.47H304.519C304.379 599.03 303.259 598.09 301.539 598.09C299.859 598.09 298.839 598.85 298.839 600.05C298.839 603.57 306.819 601.03 306.819 606.51C306.819 609.07 304.699 610.57 301.699 610.57ZM316.39 610.57C312.39 610.57 309.43 607.53 309.43 603.41C309.43 599.29 312.39 596.25 316.39 596.25C320.37 596.25 323.33 599.29 323.33 603.41C323.33 607.53 320.37 610.57 316.39 610.57ZM316.37 608.73C319.17 608.73 321.21 606.47 321.21 603.41C321.21 600.35 319.17 598.09 316.37 598.09C313.59 598.09 311.55 600.35 311.55 603.41C311.55 606.47 313.59 608.73 316.37 608.73ZM326.776 610.41V596.41H329.096L335.836 607.19V596.41H337.916V610.41H335.616L328.856 599.65V610.41H326.776ZM340.712 610.41L346.212 596.41H348.132L353.632 610.41H351.472L350.132 606.85H344.212L342.872 610.41H340.712ZM344.892 605.03H349.452L347.172 599.01L344.892 605.03ZM356.432 610.41V596.41H358.512V608.57H365.332V610.41H356.432ZM368.155 610.41V596.41H370.235V610.41H368.155ZM373.388 610.41V608.59L381.628 598.23H373.808V596.41H383.988V598.23L375.748 608.59H383.988V610.41H373.388ZM385.923 610.41L391.423 596.41H393.343L398.843 610.41H396.683L395.343 606.85H389.423L388.083 610.41H385.923ZM390.103 605.03H394.663L392.383 599.01L390.103 605.03ZM402.905 610.41V598.25H398.525V596.41H409.365V598.25H404.985V610.41H402.905ZM412.194 610.41V596.41H414.274V610.41H412.194ZM424.667 610.57C420.667 610.57 417.707 607.53 417.707 603.41C417.707 599.29 420.667 596.25 424.667 596.25C428.647 596.25 431.607 599.29 431.607 603.41C431.607 607.53 428.647 610.57 424.667 610.57ZM424.647 608.73C427.447 608.73 429.487 606.47 429.487 603.41C429.487 600.35 427.447 598.09 424.647 598.09C421.867 598.09 419.827 600.35 419.827 603.41C419.827 606.47 421.867 608.73 424.647 608.73ZM435.053 610.41V596.41H437.373L444.113 607.19V596.41H446.193V610.41H443.893L437.133 599.65V610.41H435.053Z" fill="#C9CDD1"/>
|
||||
<path d="M1404.03 608.41V594.41H1406.59L1411.05 605.57L1415.51 594.41H1418.07V608.41H1416.07V597.99L1411.89 608.41H1410.21L1406.01 597.99V608.41H1404.03ZM1422.28 608.41V594.41H1431.26V596.25H1424.36V600.27H1429.94V602.11H1424.36V606.57H1431.48V608.41H1422.28ZM1434.82 608.41V594.41H1437.38L1441.84 605.57L1446.3 594.41H1448.86V608.41H1446.86V597.99L1442.68 608.41H1441L1436.8 597.99V608.41H1434.82ZM1459.27 608.57C1455.27 608.57 1452.31 605.53 1452.31 601.41C1452.31 597.29 1455.27 594.25 1459.27 594.25C1463.25 594.25 1466.21 597.29 1466.21 601.41C1466.21 605.53 1463.25 608.57 1459.27 608.57ZM1459.25 606.73C1462.05 606.73 1464.09 604.47 1464.09 601.41C1464.09 598.35 1462.05 596.09 1459.25 596.09C1456.47 596.09 1454.43 598.35 1454.43 601.41C1454.43 604.47 1456.47 606.73 1459.25 606.73ZM1469.65 608.41V594.41H1475.13C1477.95 594.41 1479.67 595.89 1479.67 598.29C1479.67 599.99 1478.85 601.11 1477.59 601.75C1478.63 602.35 1479.27 603.47 1479.37 604.83L1479.65 608.41H1477.59L1477.31 605.01C1477.23 603.77 1476.43 602.89 1475.23 602.89H1471.73V608.41H1469.65ZM1475.07 601.05C1476.89 601.05 1477.59 599.87 1477.59 598.61C1477.59 597.33 1476.89 596.21 1475.07 596.21H1471.73V601.05H1475.07ZM1486.36 608.41V602.57L1481.46 594.41H1483.76L1487.4 600.59L1491.04 594.41H1493.34L1488.44 602.57V608.41H1486.36Z" fill="#C9CDD1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
87
fern/images/hero/letta-hero-bg.svg
Normal file
@@ -0,0 +1,87 @@
|
||||
<svg width="1666" height="1031" viewBox="0 0 1666 1031" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M900.29 1029.82C1249.26 1029.82 1532.16 859.523 1532.16 649.45C1532.16 439.377 1249.26 269.08 900.29 269.08C551.318 269.08 268.42 439.377 268.42 649.45C268.42 859.523 551.318 1029.82 900.29 1029.82Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 1013.79C1132.4 1013.79 1320.57 902.488 1320.57 765.19C1320.57 627.892 1132.4 516.59 900.29 516.59C668.176 516.59 480.01 627.892 480.01 765.19C480.01 902.488 668.176 1013.79 900.29 1013.79Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 581C1022.8 581 1122.11 516.735 1122.11 437.46C1122.11 358.185 1022.8 293.92 900.29 293.92C777.782 293.92 678.47 358.185 678.47 437.46C678.47 516.735 777.782 581 900.29 581Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 997.63C1022.8 997.63 1122.11 936.781 1122.11 861.72C1122.11 786.659 1022.8 725.81 900.29 725.81C777.782 725.81 678.47 786.659 678.47 861.72C678.47 936.781 777.782 997.63 900.29 997.63Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1239.23 579L1239.19 592.26C1239.33 541.7 1205.96 491.05 1139.14 452.48C1006.35 375.82 791.76 375.82 659.83 452.48C594.29 490.57 561.48 540.41 561.34 590.33L561.38 577.07C561.52 527.15 594.33 477.31 659.87 439.22C791.8 362.55 1006.4 362.55 1139.18 439.22C1206 477.8 1239.37 528.44 1239.23 579Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1156.36 429.23C1298.7 511.41 1299.44 644.65 1158.03 726.83C1016.62 809.01 786.59 809.01 644.26 726.83C501.92 644.65 501.17 511.41 642.58 429.23C783.99 347.05 1014.02 347.05 1156.36 429.23ZM661.43 716.85C794.22 793.51 1008.81 793.51 1140.74 716.85C1272.67 640.18 1271.97 515.88 1139.18 439.21C1006.39 362.55 791.8 362.55 659.87 439.21C527.94 515.88 528.64 640.18 661.43 716.85Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1263.6 579.07L1263.56 592.33C1263.41 645.84 1228.24 699.27 1157.99 740.09C1016.58 822.27 786.55 822.27 644.22 740.09C572.59 698.74 536.82 644.45 536.97 590.25L537.01 576.99C536.86 631.19 572.63 685.47 644.26 726.83C786.6 809.01 1016.62 809.01 1158.03 726.83C1228.28 686 1263.45 632.57 1263.6 579.07Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M919.03 371.73L918.05 423.08L891.14 422.85L892.12 371.51L919.03 371.73Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M919.03 371.73L918.91 411.52L917.94 462.87L918.05 423.08L919.03 371.73Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M918.05 423.08L917.94 462.87L891.03 462.64L891.14 422.85L918.05 423.08Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M814.12 378.81L843.52 427.31L818.13 432.43L788.729 383.94L814.12 378.81Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M843.52 427.31L843.4 467.11L818.02 472.23L818.13 432.43L843.52 427.31Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M818.13 432.43L818.02 472.23L788.62 423.73L788.73 383.94L818.13 432.43Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M719.84 406.26L776.06 446.07L755.26 455.91L699.03 416.11L719.84 406.26Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M776.06 446.07L775.95 485.86L755.15 495.7L755.26 455.91L776.06 446.07Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M755.26 455.91L755.15 495.7L698.92 455.9L699.03 416.11L755.26 455.91Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M693.109 516.59L688.14 531.9L601.02 522.26L605.979 506.95L693.109 516.59Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M693.11 516.59L693 556.38L688.03 571.69L688.14 531.9L693.11 516.59Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M688.14 531.9L688.03 571.69L600.91 562.05L601.02 522.26L688.14 531.9Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M687.61 559.86L691.99 575.24L604.53 583.44L600.15 568.05L687.61 559.86Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M691.99 575.24L691.88 615.03L604.41 623.23L604.53 583.44L691.99 575.24Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M604.53 583.44L604.41 623.23L600.03 607.84L600.15 568.05L604.53 583.44Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M708 601.65L721.2 615.26L643.94 640.29L630.74 626.69L708 601.65Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M721.2 615.26L721.08 655.05L643.83 680.09L643.94 640.29L721.2 615.26Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M643.94 640.29L643.83 680.09L630.63 666.48L630.74 626.69L643.94 640.29Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1021.91 385.87L990.67 433.86L965.49 428.32L996.72 380.33L1021.91 385.87Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1021.91 385.87L1021.8 425.66L990.56 473.65L990.67 433.86L1021.91 385.87Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M990.67 433.86L990.56 473.65L965.37 468.11L965.49 428.32L990.67 433.86Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1110.35 419.52L1052.63 458.37L1032.2 448.19L1089.93 409.33L1110.35 419.52Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1110.35 419.52L1110.24 459.31L1052.51 498.17L1052.63 458.37L1110.35 419.52Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1052.63 458.37L1052.51 498.17L1032.09 487.98L1032.2 448.19L1052.63 458.37Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M772.23 647.12L714.51 685.98L694.08 675.79L751.81 636.93L772.23 647.12Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M772.23 647.12L772.12 686.91L714.39 725.77L714.51 685.98L772.23 647.12Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M714.51 685.98L714.39 725.77L693.97 715.58L694.08 675.79L714.51 685.98Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M838.95 666.98L807.71 714.98L782.53 709.44L813.76 661.44L838.95 666.98Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M838.95 666.98L838.84 706.77L807.6 754.77L807.71 714.98L838.95 666.98Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M807.71 714.98L807.6 754.77L782.41 749.23L782.53 709.44L807.71 714.98Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1199.91 511.87L1204.29 527.26L1116.83 535.45L1112.45 520.06L1199.91 511.87Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1204.29 527.26L1204.18 567.05L1116.71 575.24L1116.83 535.45L1204.29 527.26Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1116.83 535.45L1116.71 575.24L1112.33 559.85L1112.45 520.06L1116.83 535.45Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1203.42 573.04L1198.45 588.35L1111.33 578.71L1116.29 563.4L1203.42 573.04Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1203.42 573.04L1203.31 612.83L1198.34 628.14L1198.45 588.35L1203.42 573.04Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1198.45 588.35L1198.34 628.14L1111.21 618.5L1111.33 578.71L1198.45 588.35Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1170.6 631.15L1156.88 644.54L1080.61 618.23L1094.32 604.85L1170.6 631.15Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1170.6 631.15L1170.49 670.94L1156.77 684.33L1156.88 644.54L1170.6 631.15Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1156.88 644.54L1156.77 684.33L1080.49 658.02L1080.61 618.23L1156.88 644.54Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1049.18 639.39L1105.41 679.19L1084.6 689.04L1028.37 649.24L1049.18 639.39Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1105.41 679.19L1105.29 718.98L1084.49 728.83L1084.6 689.04L1105.41 679.19Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1084.6 689.04L1084.49 728.83L1028.26 689.03L1028.37 649.24L1084.6 689.04Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M986.31 662.87L1015.71 711.37L990.319 716.49L960.919 667.99L986.31 662.87Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1015.71 711.37L1015.59 751.16L990.2 756.28L990.32 716.49L1015.71 711.37Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M990.32 716.49L990.2 756.28L960.81 707.78L960.92 667.99L990.32 716.49Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1013.1 546.16L1013.06 559.42C1013.11 542.59 1002 525.74 979.76 512.9C935.57 487.39 864.16 487.39 820.25 512.9C798.44 525.57 787.52 542.16 787.47 558.77L787.51 545.51C787.56 528.9 798.47 512.31 820.29 499.64C864.19 474.13 935.61 474.13 979.8 499.64C1002.04 512.48 1013.14 529.33 1013.1 546.16Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1022.65 474.74C1090.66 514 1091.01 577.66 1023.45 616.93C955.88 656.19 845.98 656.2 777.98 616.93C709.97 577.67 709.61 514.01 777.18 474.74C844.74 435.48 954.65 435.47 1022.65 474.74ZM820.82 592.03C865.01 617.54 936.42 617.54 980.33 592.03C1024.23 566.52 1024 525.15 979.81 499.64C935.62 474.13 864.21 474.13 820.3 499.64C776.4 525.15 776.63 566.52 820.82 592.03Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1073.89 546.33L1073.85 559.59C1073.78 585.16 1056.98 610.68 1023.41 630.19C955.84 669.45 845.94 669.46 777.94 630.19C743.72 610.43 726.63 584.5 726.7 558.6L726.74 545.34C726.67 571.24 743.76 597.17 777.98 616.93C845.99 656.19 955.89 656.19 1023.45 616.93C1057.01 597.42 1073.82 571.9 1073.89 546.33Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M953.35 489.09L953.24 528.88C953.22 536.72 948.06 544.55 937.77 550.53C917.05 562.57 883.34 562.57 862.48 550.53C851.99 544.47 846.74 536.52 846.77 528.58L846.88 488.79C846.86 496.73 852.1 504.68 862.59 510.74C883.45 522.78 917.16 522.78 937.88 510.74C948.17 504.76 953.33 496.93 953.35 489.09Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M937.63 467.14C958.49 479.18 958.6 498.71 937.88 510.75C917.16 522.79 883.45 522.79 862.59 510.75C841.73 498.71 841.63 479.18 862.35 467.14C883.07 455.1 916.78 455.1 937.63 467.14Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 827.53C1132.4 827.53 1320.57 705.769 1320.57 555.57C1320.57 405.371 1132.4 283.61 900.29 283.61C668.176 283.61 480.01 405.371 480.01 555.57C480.01 705.769 668.176 827.53 900.29 827.53Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 935.63C1196.82 935.63 1437.2 788.35 1437.2 606.67C1437.2 424.99 1196.82 277.71 900.29 277.71C603.763 277.71 363.38 424.99 363.38 606.67C363.38 788.35 603.763 935.63 900.29 935.63Z" stroke="#202020" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1157.37 397.29H1005.5" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1005.61 399.55C1006.86 399.55 1007.87 398.538 1007.87 397.29C1007.87 396.042 1006.86 395.03 1005.61 395.03C1004.36 395.03 1003.35 396.042 1003.35 397.29C1003.35 398.538 1004.36 399.55 1005.61 399.55Z" fill="#202020"/>
|
||||
<path d="M1073.89 287.78L1073.85 301.04C1073.78 326.61 1056.98 352.13 1023.41 371.64C955.84 410.9 845.94 410.91 777.94 371.64C743.72 351.88 726.63 325.95 726.7 300.05L726.74 286.79C726.67 312.69 743.76 338.62 777.98 358.38C845.99 397.64 955.89 397.64 1023.45 358.38C1057.01 338.87 1073.82 313.35 1073.89 287.78Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1022.65 216.19C1090.66 255.45 1091.01 319.11 1023.45 358.38C955.88 397.64 845.98 397.65 777.98 358.38C709.97 319.12 709.61 255.46 777.18 216.19C844.74 176.93 954.65 176.92 1022.65 216.19Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1052.51 267.53L1052.48 279.16C1052.42 301.58 1037.68 323.96 1008.25 341.07C949 375.5 852.63 375.5 793 341.07C762.99 323.74 748 301 748.07 278.29L748.1 266.66C748.04 289.37 763.02 312.11 793.03 329.44C852.66 363.87 949.03 363.87 1008.28 329.44C1037.71 312.34 1052.45 289.95 1052.51 267.53Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1007.58 204.76C1067.21 239.19 1067.53 295.01 1008.28 329.44C949.03 363.87 852.66 363.87 793.03 329.44C733.4 295.01 733.08 239.19 792.33 204.76C851.57 170.33 947.95 170.33 1007.58 204.76Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 587.21V493.96" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M902.55 494.08C902.55 492.83 901.54 491.82 900.29 491.82C899.04 491.82 898.03 492.83 898.03 494.08C898.03 495.33 899.04 496.34 900.29 496.34C901.54 496.34 902.55 495.33 902.55 494.08Z" fill="#202020"/>
|
||||
<path d="M1422.45 377.03H1154.83V417.56H1422.45V377.03Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M978.03 572H822.6V612.53H978.03V572Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M900.29 88.72V250.28" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M901.158 252.257C902.311 251.78 902.859 250.458 902.381 249.305C901.903 248.151 900.581 247.604 899.428 248.081C898.275 248.559 897.728 249.881 898.205 251.034C898.683 252.187 900.005 252.735 901.158 252.257Z" fill="#202020"/>
|
||||
<path d="M1034.1 57H766.48V97.53H1034.1V57Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M859.507 85.4102L865.007 71.4102H866.927L872.427 85.4102H870.267L868.927 81.8502H863.007L861.667 85.4102H859.507ZM863.687 80.0302H868.247L865.967 74.0102L863.687 80.0302ZM880.481 85.5702C877.081 85.5702 873.901 83.1702 873.901 78.4102C873.901 73.6502 877.101 71.2502 880.761 71.2502C884.101 71.2502 886.581 73.1702 886.881 75.9502H884.641C884.341 74.2302 882.841 73.0902 880.741 73.0902C878.041 73.0902 876.021 75.0102 876.021 78.4102C876.021 81.8902 878.041 83.7302 880.761 83.7302C883.021 83.7302 884.821 82.4302 884.821 80.8102C884.821 80.1302 884.501 79.7702 883.861 79.7702H880.841V78.0902H884.501C885.921 78.0902 886.821 78.9702 886.821 80.4102V85.4102H884.921V83.4302C884.261 84.5702 882.641 85.5702 880.481 85.5702ZM890.524 85.4102V71.4102H899.504V73.2502H892.604V77.2702H898.184V79.1102H892.604V83.5702H899.724V85.4102H890.524ZM903.067 85.4102V71.4102H905.387L912.127 82.1902V71.4102H914.207V85.4102H911.907L905.147 74.6502V85.4102H903.067ZM921.403 85.4102V73.2502H917.023V71.4102H927.863V73.2502H923.483V85.4102H921.403ZM934.803 85.5702C931.483 85.5702 929.583 83.6702 929.423 80.7702H931.443C931.603 82.5702 932.663 83.7302 934.803 83.7302C936.563 83.7302 937.803 83.0502 937.803 81.5302C937.803 78.0302 929.843 80.3302 929.843 75.0702C929.843 72.7902 931.823 71.2502 934.643 71.2502C937.503 71.2502 939.463 72.9102 939.643 75.4702H937.623C937.483 74.0302 936.363 73.0902 934.643 73.0902C932.963 73.0902 931.943 73.8502 931.943 75.0502C931.943 78.5702 939.923 76.0302 939.923 81.5102C939.923 84.0702 937.803 85.5702 934.803 85.5702Z" fill="#202020"/>
|
||||
<path d="M881.754 599.41V585.41H883.834V597.57H890.654V599.41H881.754ZM893.477 599.41V585.41H895.557V597.57H902.377V599.41H893.477ZM905.2 599.41V585.41H907.76L912.22 596.57L916.68 585.41H919.24V599.41H917.24V588.99L913.06 599.41H911.38L907.18 588.99V599.41H905.2Z" fill="#202020"/>
|
||||
<path d="M1259.12 405.41V393.25H1254.74V391.41H1265.58V393.25H1261.2V405.41H1259.12ZM1273.88 405.57C1269.88 405.57 1266.92 402.53 1266.92 398.41C1266.92 394.29 1269.88 391.25 1273.88 391.25C1277.86 391.25 1280.82 394.29 1280.82 398.41C1280.82 402.53 1277.86 405.57 1273.88 405.57ZM1273.86 403.73C1276.66 403.73 1278.7 401.47 1278.7 398.41C1278.7 395.35 1276.66 393.09 1273.86 393.09C1271.08 393.09 1269.04 395.35 1269.04 398.41C1269.04 401.47 1271.08 403.73 1273.86 403.73ZM1290.47 405.57C1286.47 405.57 1283.51 402.53 1283.51 398.41C1283.51 394.29 1286.47 391.25 1290.47 391.25C1294.45 391.25 1297.41 394.29 1297.41 398.41C1297.41 402.53 1294.45 405.57 1290.47 405.57ZM1290.45 403.73C1293.25 403.73 1295.29 401.47 1295.29 398.41C1295.29 395.35 1293.25 393.09 1290.45 393.09C1287.67 393.09 1285.63 395.35 1285.63 398.41C1285.63 401.47 1287.67 403.73 1290.45 403.73ZM1300.86 405.41V391.41H1302.94V403.57H1309.76V405.41H1300.86ZM1316.59 405.57C1313.27 405.57 1311.37 403.67 1311.21 400.77H1313.23C1313.39 402.57 1314.45 403.73 1316.59 403.73C1318.35 403.73 1319.59 403.05 1319.59 401.53C1319.59 398.03 1311.63 400.33 1311.63 395.07C1311.63 392.79 1313.61 391.25 1316.43 391.25C1319.29 391.25 1321.25 392.91 1321.43 395.47H1319.41C1319.27 394.03 1318.15 393.09 1316.43 393.09C1314.75 393.09 1313.73 393.85 1313.73 395.05C1313.73 398.57 1321.71 396.03 1321.71 401.51C1321.71 404.07 1319.59 405.57 1316.59 405.57Z" fill="#202020"/>
|
||||
<path d="M1475.61 644.406H1388.41V731.603H1475.61V644.406Z" fill="#202020"/>
|
||||
<path d="M1562.79 529.403V470H1301.2V529.403C1301.2 544.76 1288.76 557.198 1273.4 557.198H1214V818.802H1273.4C1288.76 818.802 1301.2 831.24 1301.2 846.597V906H1562.8V846.597C1562.8 831.24 1575.24 818.802 1590.6 818.802H1650V557.198H1590.6C1575.24 557.198 1562.8 544.76 1562.8 529.403H1562.79ZM1562.79 790.996C1562.79 806.353 1550.35 818.79 1535 818.79H1328.99C1313.64 818.79 1301.2 806.353 1301.2 790.996V584.992C1301.2 569.635 1313.64 557.198 1328.99 557.198H1535C1550.35 557.198 1562.79 569.635 1562.79 584.992V790.996Z" fill="#202020"/>
|
||||
<path d="M1314.02 602.22H1175.1" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1175.21 604.48C1176.46 604.48 1177.47 603.468 1177.47 602.22C1177.47 600.972 1176.46 599.96 1175.21 599.96C1173.96 599.96 1172.95 600.972 1172.95 602.22C1172.95 603.468 1173.96 604.48 1175.21 604.48Z" fill="#202020"/>
|
||||
<path d="M485.98 602.22H630.47" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M630.36 604.47C631.61 604.47 632.62 603.46 632.62 602.21C632.62 600.96 631.61 599.95 630.36 599.95C629.11 599.95 628.1 600.96 628.1 602.21C628.1 603.46 629.11 604.47 630.36 604.47Z" fill="#202020"/>
|
||||
<path d="M485.98 581.95H218.36V622.48H485.98V581.95Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1581.64 580.33H1314.02V620.86H1581.64V580.33Z" stroke="#202020" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M257.811 610.41V596.41H263.231C266.111 596.41 267.811 598.15 267.811 600.63C267.811 603.11 266.111 604.85 263.231 604.85H259.891V610.41H257.811ZM263.171 603.05C264.971 603.05 265.671 601.91 265.671 600.63C265.671 599.35 264.971 598.21 263.171 598.21H259.891V603.05H263.171ZM270.862 610.41V596.41H279.842V598.25H272.942V602.27H278.522V604.11H272.942V608.57H280.062V610.41H270.862ZM283.405 610.41V596.41H288.885C291.705 596.41 293.425 597.89 293.425 600.29C293.425 601.99 292.605 603.11 291.345 603.75C292.385 604.35 293.025 605.47 293.125 606.83L293.405 610.41H291.345L291.065 607.01C290.985 605.77 290.185 604.89 288.985 604.89H285.485V610.41H283.405ZM288.825 603.05C290.645 603.05 291.345 601.87 291.345 600.61C291.345 599.33 290.645 598.21 288.825 598.21H285.485V603.05H288.825ZM301.699 610.57C298.379 610.57 296.479 608.67 296.319 605.77H298.339C298.499 607.57 299.559 608.73 301.699 608.73C303.459 608.73 304.699 608.05 304.699 606.53C304.699 603.03 296.739 605.33 296.739 600.07C296.739 597.79 298.719 596.25 301.539 596.25C304.399 596.25 306.359 597.91 306.539 600.47H304.519C304.379 599.03 303.259 598.09 301.539 598.09C299.859 598.09 298.839 598.85 298.839 600.05C298.839 603.57 306.819 601.03 306.819 606.51C306.819 609.07 304.699 610.57 301.699 610.57ZM316.39 610.57C312.39 610.57 309.43 607.53 309.43 603.41C309.43 599.29 312.39 596.25 316.39 596.25C320.37 596.25 323.33 599.29 323.33 603.41C323.33 607.53 320.37 610.57 316.39 610.57ZM316.37 608.73C319.17 608.73 321.21 606.47 321.21 603.41C321.21 600.35 319.17 598.09 316.37 598.09C313.59 598.09 311.55 600.35 311.55 603.41C311.55 606.47 313.59 608.73 316.37 608.73ZM326.776 610.41V596.41H329.096L335.836 607.19V596.41H337.916V610.41H335.616L328.856 599.65V610.41H326.776ZM340.712 610.41L346.212 596.41H348.132L353.632 610.41H351.472L350.132 606.85H344.212L342.872 610.41H340.712ZM344.892 605.03H349.452L347.172 599.01L344.892 605.03ZM356.432 610.41V596.41H358.512V608.57H365.332V610.41H356.432ZM368.155 610.41V596.41H370.235V610.41H368.155ZM373.388 610.41V608.59L381.628 598.23H373.808V596.41H383.988V598.23L375.748 608.59H383.988V610.41H373.388ZM385.923 610.41L391.423 596.41H393.343L398.843 610.41H396.683L395.343 606.85H389.423L388.083 610.41H385.923ZM390.103 605.03H394.663L392.383 599.01L390.103 605.03ZM402.905 610.41V598.25H398.525V596.41H409.365V598.25H404.985V610.41H402.905ZM412.194 610.41V596.41H414.274V610.41H412.194ZM424.667 610.57C420.667 610.57 417.707 607.53 417.707 603.41C417.707 599.29 420.667 596.25 424.667 596.25C428.647 596.25 431.607 599.29 431.607 603.41C431.607 607.53 428.647 610.57 424.667 610.57ZM424.647 608.73C427.447 608.73 429.487 606.47 429.487 603.41C429.487 600.35 427.447 598.09 424.647 598.09C421.867 598.09 419.827 600.35 419.827 603.41C419.827 606.47 421.867 608.73 424.647 608.73ZM435.053 610.41V596.41H437.373L444.113 607.19V596.41H446.193V610.41H443.893L437.133 599.65V610.41H435.053Z" fill="#202020"/>
|
||||
<path d="M1404.03 608.41V594.41H1406.59L1411.05 605.57L1415.51 594.41H1418.07V608.41H1416.07V597.99L1411.89 608.41H1410.21L1406.01 597.99V608.41H1404.03ZM1422.28 608.41V594.41H1431.26V596.25H1424.36V600.27H1429.94V602.11H1424.36V606.57H1431.48V608.41H1422.28ZM1434.82 608.41V594.41H1437.38L1441.84 605.57L1446.3 594.41H1448.86V608.41H1446.86V597.99L1442.68 608.41H1441L1436.8 597.99V608.41H1434.82ZM1459.27 608.57C1455.27 608.57 1452.31 605.53 1452.31 601.41C1452.31 597.29 1455.27 594.25 1459.27 594.25C1463.25 594.25 1466.21 597.29 1466.21 601.41C1466.21 605.53 1463.25 608.57 1459.27 608.57ZM1459.25 606.73C1462.05 606.73 1464.09 604.47 1464.09 601.41C1464.09 598.35 1462.05 596.09 1459.25 596.09C1456.47 596.09 1454.43 598.35 1454.43 601.41C1454.43 604.47 1456.47 606.73 1459.25 606.73ZM1469.65 608.41V594.41H1475.13C1477.95 594.41 1479.67 595.89 1479.67 598.29C1479.67 599.99 1478.85 601.11 1477.59 601.75C1478.63 602.35 1479.27 603.47 1479.37 604.83L1479.65 608.41H1477.59L1477.31 605.01C1477.23 603.77 1476.43 602.89 1475.23 602.89H1471.73V608.41H1469.65ZM1475.07 601.05C1476.89 601.05 1477.59 599.87 1477.59 598.61C1477.59 597.33 1476.89 596.21 1475.07 596.21H1471.73V601.05H1475.07ZM1486.36 608.41V602.57L1481.46 594.41H1483.76L1487.4 600.59L1491.04 594.41H1493.34L1488.44 602.57V608.41H1486.36Z" fill="#202020"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
BIN
fern/images/hero_dark.webp
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
fern/images/hero_light.webp
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
fern/images/letta_cloud_agent_chat.png
Normal file
|
After Width: | Height: | Size: 712 KiB |
BIN
fern/images/letta_cloud_agents_list.png
Normal file
|
After Width: | Height: | Size: 510 KiB |