Skip to content

Commit 55389c0

Browse files
committed
Fix llms.txt generation
1 parent 92e3407 commit 55389c0

File tree

4 files changed

+37
-152
lines changed

4 files changed

+37
-152
lines changed

app/llms.txt/route.ts

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,12 @@
1-
import * as fs from 'node:fs/promises';
2-
import fg from 'fast-glob';
3-
import { remarkInclude } from 'fumadocs-mdx/config';
4-
import matter from 'gray-matter';
5-
import { remark } from 'remark';
6-
import remarkGfm from 'remark-gfm';
7-
import remarkMdx from 'remark-mdx';
8-
import remarkStringify from 'remark-stringify';
1+
import { getLLMText } from '@/lib/get-llm-text';
2+
import { source } from '@/lib/source';
93

4+
// cached forever
105
export const revalidate = false;
116

127
export async function GET() {
13-
// all scanned content
14-
const files = await fg(['./content/docs/**/*.mdx']);
15-
16-
const scan = files.map(async (file) => {
17-
const fileContent = await fs.readFile(file);
18-
const { content, data } = matter(fileContent.toString());
19-
20-
const processed = await processContent(content);
21-
return `file: ${file}
22-
meta: ${JSON.stringify(data, null, 2)}
23-
24-
${processed}`;
25-
});
26-
8+
const scan = source.getPages().map(getLLMText);
279
const scanned = await Promise.all(scan);
2810

2911
return new Response(scanned.join('\n\n'));
3012
}
31-
32-
async function processContent(content: string): Promise<string> {
33-
const file = await remark()
34-
.use(remarkMdx)
35-
// https://fumadocs.vercel.app/docs/mdx/include
36-
.use(remarkInclude)
37-
// gfm styles
38-
.use(remarkGfm)
39-
// .use(your remark plugins)
40-
.use(remarkStringify) // to string
41-
.process(content);
42-
43-
return String(file);
44-
}

lib/get-llm-text.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { InferPageType } from 'fumadocs-core/source';
2+
import { remarkInclude } from 'fumadocs-mdx/config';
3+
import { remark } from 'remark';
4+
import remarkGfm from 'remark-gfm';
5+
import remarkMdx from 'remark-mdx';
6+
7+
import { source } from '@/lib/source';
8+
9+
const processor = remark()
10+
.use(remarkMdx)
11+
// needed for Fumadocs MDX
12+
.use(remarkInclude)
13+
.use(remarkGfm);
14+
15+
export async function getLLMText(page: InferPageType<typeof source>) {
16+
const processed = await processor.process({
17+
path: page.data._file.absolutePath,
18+
value: page.data.content,
19+
});
20+
21+
return `# ${page.data.title}
22+
URL: ${page.url}
23+
24+
${page.data.description}
25+
26+
${processed.value}`;
27+
}

package-lock.json

Lines changed: 5 additions & 114 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@
1414
"dependencies": {
1515
"fast-glob": "^3.3.3",
1616
"fumadocs-core": "^15.6.11",
17-
"fumadocs-mdx": "^11.7.3",
17+
"fumadocs-mdx": "^11.7.5",
1818
"fumadocs-openapi": "^9.1.13",
1919
"fumadocs-ui": "^15.6.11",
2020
"geist": "^1.4.2",
21-
"gray-matter": "^4.0.3",
2221
"next": "^15.4.6",
2322
"react": "^19.1.1",
2423
"react-dom": "^19.1.1",

0 commit comments

Comments
 (0)