@llmindset/hf-mcp 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/docs-search/doc-fetch.d.ts +24 -0
  2. package/dist/docs-search/doc-fetch.d.ts.map +1 -0
  3. package/dist/docs-search/doc-fetch.js +54 -0
  4. package/dist/docs-search/doc-fetch.js.map +1 -0
  5. package/dist/docs-search/doc-fetch.test.d.ts +2 -0
  6. package/dist/docs-search/doc-fetch.test.d.ts.map +1 -0
  7. package/dist/docs-search/doc-fetch.test.js +52 -0
  8. package/dist/docs-search/doc-fetch.test.js.map +1 -0
  9. package/dist/docs-search/doc-mappings.d.ts +7 -0
  10. package/dist/docs-search/doc-mappings.d.ts.map +1 -0
  11. package/dist/docs-search/doc-mappings.js +75 -0
  12. package/dist/docs-search/doc-mappings.js.map +1 -0
  13. package/dist/docs-search/docs-semantic-search.d.ts +41 -0
  14. package/dist/docs-search/docs-semantic-search.d.ts.map +1 -0
  15. package/dist/docs-search/docs-semantic-search.js +138 -0
  16. package/dist/docs-search/docs-semantic-search.js.map +1 -0
  17. package/dist/docs-search/docs-semantic-search.test.d.ts +2 -0
  18. package/dist/docs-search/docs-semantic-search.test.d.ts.map +1 -0
  19. package/dist/docs-search/docs-semantic-search.test.js +244 -0
  20. package/dist/docs-search/docs-semantic-search.test.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/tool-ids.d.ts +6 -4
  26. package/dist/tool-ids.d.ts.map +1 -1
  27. package/dist/tool-ids.js +7 -16
  28. package/dist/tool-ids.js.map +1 -1
  29. package/package.json +2 -2
  30. package/src/docs-search/doc-fetch.test.ts +74 -0
  31. package/src/docs-search/doc-fetch.ts +93 -0
  32. package/src/docs-search/doc-mappings.ts +79 -0
  33. package/src/docs-search/docs-semantic-search.test.ts +318 -0
  34. package/src/docs-search/docs-semantic-search.ts +207 -0
  35. package/src/index.ts +2 -0
  36. package/src/tool-ids.ts +9 -18
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const DOC_FETCH_CONFIG: {
3
+ readonly name: "fetch_hf_doc";
4
+ readonly description: "Fetch a document from the Hugging Face documentation library.";
5
+ readonly schema: z.ZodObject<{
6
+ doc_url: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ doc_url: string;
9
+ }, {
10
+ doc_url: string;
11
+ }>;
12
+ readonly annotations: {
13
+ readonly title: "Fetch a document from the Hugging Face library";
14
+ readonly destructiveHint: false;
15
+ readonly readOnlyHint: true;
16
+ readonly openWorldHint: true;
17
+ };
18
+ };
19
+ export type DocFetchParams = z.infer<typeof DOC_FETCH_CONFIG.schema>;
20
+ export declare class DocFetchTool {
21
+ processUrl(hfUrl: string): string;
22
+ fetch(url: string): Promise<string>;
23
+ }
24
+ //# sourceMappingURL=doc-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-fetch.d.ts","sourceRoot":"","sources":["../../src/docs-search/doc-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAkBrE,qBAAa,YAAY;IAIxB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAiC3B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBzC"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { DOC_MAPPINGS } from './doc-mappings.js';
3
+ export const DOC_FETCH_CONFIG = {
4
+ name: 'fetch_hf_doc',
5
+ description: 'Fetch a document from the Hugging Face documentation library.',
6
+ schema: z.object({
7
+ doc_url: z
8
+ .string()
9
+ .min(28, 'Url should start with https://huggingface.co/docs/')
10
+ .max(200, 'Query too long')
11
+ .describe('Hugging Face documentation URL'),
12
+ }),
13
+ annotations: {
14
+ title: 'Fetch a document from the Hugging Face library',
15
+ destructiveHint: false,
16
+ readOnlyHint: true,
17
+ openWorldHint: true,
18
+ },
19
+ };
20
+ export class DocFetchTool {
21
+ processUrl(hfUrl) {
22
+ if (!hfUrl.startsWith('https://huggingface.co/docs/')) {
23
+ throw new Error('That was not a valid Hugging Face document URL');
24
+ }
25
+ const urlPath = hfUrl.replace('https://huggingface.co/docs/', '').split('#')[0] || '';
26
+ const parts = urlPath.split('/');
27
+ const packageName = parts[0] || '';
28
+ let fetchUrl = hfUrl;
29
+ const mapping = DOC_MAPPINGS[packageName];
30
+ if (mapping) {
31
+ const remainingPath = parts.slice(1).join('/');
32
+ const filePath = remainingPath ? `${remainingPath}.md` : 'index.md';
33
+ const githubUrl = `https://raw.githubusercontent.com/${mapping.repo_id}/refs/heads/main/${mapping.doc_folder}/${filePath}`;
34
+ fetchUrl = githubUrl;
35
+ }
36
+ console.error(fetchUrl);
37
+ return fetchUrl;
38
+ }
39
+ async fetch(url) {
40
+ try {
41
+ const githubUrl = this.processUrl(url);
42
+ const response = await fetch(githubUrl);
43
+ if (!response.ok) {
44
+ throw new Error(`Failed to fetch document: ${response.status} ${response.statusText}`);
45
+ }
46
+ const content = await response.text();
47
+ return content;
48
+ }
49
+ catch (error) {
50
+ throw new Error(`Failed to fetch document: ${error instanceof Error ? error.message : 'Unknown error'}`);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=doc-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-fetch.js","sourceRoot":"","sources":["../../src/docs-search/doc-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,+DAA+D;IAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,EAAE,EAAE,oDAAoD,CAAC;aAC7D,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;aAC1B,QAAQ,CAAC,gCAAgC,CAAC;KAC5C,CAAC;IACF,WAAW,EAAE;QACZ,KAAK,EAAE,gDAAgD;QACvD,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;KACnB;CACQ,CAAC;AAoBX,MAAM,OAAO,YAAY;IAIxB,UAAU,CAAC,KAAa;QAEvB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACnE,CAAC;QAGD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAGtF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAGnC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;YAGpE,MAAM,SAAS,GAAG,qCAAqC,OAAO,CAAC,OAAO,oBAAoB,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3H,QAAQ,GAAG,SAAS,CAAC;QACtB,CAAC;QAGD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,GAAW;QACtB,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YAExC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1G,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-fetch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-fetch.test.d.ts","sourceRoot":"","sources":["../../src/docs-search/doc-fetch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { DocFetchTool } from './doc-fetch.js';
3
+ describe('DocFetchTool', () => {
4
+ const tool = new DocFetchTool();
5
+ describe('URL conversion', () => {
6
+ it('should convert basic HF docs URL to GitHub URL', () => {
7
+ const hfUrl = 'https://huggingface.co/docs/dataset-viewer/index';
8
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/dataset-viewer/refs/heads/main/docs/source/index.md';
9
+ const result = tool.processUrl(hfUrl);
10
+ expect(result).toBe(expectedUrl);
11
+ });
12
+ it('should handle URLs with fragments by removing them', () => {
13
+ const hfUrl = 'https://huggingface.co/docs/huggingface_hub/guides/upload#faster-uploads';
14
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/huggingface_hub/refs/heads/main/docs/source/en/guides/upload.md';
15
+ const result = tool.processUrl(hfUrl);
16
+ expect(result).toBe(expectedUrl);
17
+ });
18
+ it('should handle transformers documentation', () => {
19
+ const hfUrl = 'https://huggingface.co/docs/transformers/model_doc/bert';
20
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/transformers/refs/heads/main/docs/source/en/model_doc/bert.md';
21
+ const result = tool.processUrl(hfUrl);
22
+ expect(result).toBe(expectedUrl);
23
+ });
24
+ it('should handle diffusers documentation', () => {
25
+ const hfUrl = 'https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion';
26
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/diffusers/refs/heads/main/docs/source/en/api/pipelines/stable_diffusion.md';
27
+ const result = tool.processUrl(hfUrl);
28
+ expect(result).toBe(expectedUrl);
29
+ });
30
+ it('should handle timm documentation with custom package name', () => {
31
+ const hfUrl = 'https://huggingface.co/docs/timm/models';
32
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/pytorch-image-models/refs/heads/main/hfdocs/source/models.md';
33
+ const result = tool.processUrl(hfUrl);
34
+ expect(result).toBe(expectedUrl);
35
+ });
36
+ it('should default to index.md when no path is provided', () => {
37
+ const hfUrl = 'https://huggingface.co/docs/transformers';
38
+ const expectedUrl = 'https://raw.githubusercontent.com/huggingface/transformers/refs/heads/main/docs/source/en/index.md';
39
+ const result = tool.processUrl(hfUrl);
40
+ expect(result).toBe(expectedUrl);
41
+ });
42
+ it('should throw error for URLs not starting with correct prefix', () => {
43
+ const invalidUrl = 'https://example.com/docs/something';
44
+ expect(() => tool.processUrl(invalidUrl)).toThrow('That was not a valid Hugging Face document URL');
45
+ });
46
+ it('should throw error for unknown package names', () => {
47
+ const unknownPackageUrl = 'https://huggingface.co/docs/unknown-package/guide';
48
+ expect(tool.processUrl(unknownPackageUrl)).toBe('https://huggingface.co/docs/unknown-package/guide');
49
+ });
50
+ });
51
+ });
52
+ //# sourceMappingURL=doc-fetch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-fetch.test.js","sourceRoot":"","sources":["../../src/docs-search/doc-fetch.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface DocMapping {
2
+ repo_id: string;
3
+ doc_folder: string;
4
+ }
5
+ export declare const DOC_MAPPINGS: Record<string, DocMapping>;
6
+ export {};
7
+ //# sourceMappingURL=doc-mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-mappings.d.ts","sourceRoot":"","sources":["../../src/docs-search/doc-mappings.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAyEnD,CAAC"}
@@ -0,0 +1,75 @@
1
+ export const DOC_MAPPINGS = {
2
+ 'tokenizers': {
3
+ repo_id: 'huggingface/tokenizers',
4
+ doc_folder: 'docs/source-doc-builder'
5
+ },
6
+ 'diffusers': {
7
+ repo_id: 'huggingface/diffusers',
8
+ doc_folder: 'docs/source/en'
9
+ },
10
+ 'accelerate': {
11
+ repo_id: 'huggingface/accelerate',
12
+ doc_folder: 'docs/source'
13
+ },
14
+ 'huggingface_hub': {
15
+ repo_id: 'huggingface/huggingface_hub',
16
+ doc_folder: 'docs/source/en'
17
+ },
18
+ 'transformers': {
19
+ repo_id: 'huggingface/transformers',
20
+ doc_folder: 'docs/source/en'
21
+ },
22
+ 'hub': {
23
+ repo_id: 'huggingface/hub-docs',
24
+ doc_folder: 'docs/hub'
25
+ },
26
+ 'huggingface.js': {
27
+ repo_id: 'huggingface/huggingface.js',
28
+ doc_folder: 'docs'
29
+ },
30
+ 'transformers.js': {
31
+ repo_id: 'huggingface/transformers.js',
32
+ doc_folder: 'docs/source'
33
+ },
34
+ 'smolagents': {
35
+ repo_id: 'huggingface/smolagents',
36
+ doc_folder: 'docs/source/en'
37
+ },
38
+ 'peft': {
39
+ repo_id: 'huggingface/peft',
40
+ doc_folder: 'docs/source'
41
+ },
42
+ 'trl': {
43
+ repo_id: 'huggingface/trl',
44
+ doc_folder: 'docs/source'
45
+ },
46
+ 'bitsandbytes': {
47
+ repo_id: 'bitsandbytes-foundation/bitsandbytes',
48
+ doc_folder: 'docs/source'
49
+ },
50
+ 'lerobot': {
51
+ repo_id: 'huggingface/lerobot',
52
+ doc_folder: 'docs/source'
53
+ },
54
+ 'timm': {
55
+ repo_id: 'huggingface/pytorch-image-models',
56
+ doc_folder: 'hfdocs/source'
57
+ },
58
+ 'inference-providers': {
59
+ repo_id: 'huggingface/hub-docs',
60
+ doc_folder: 'docs/inference-providers'
61
+ },
62
+ 'safetensors': {
63
+ repo_id: 'huggingface/safetensors',
64
+ doc_folder: 'docs/source'
65
+ },
66
+ 'inference-endpoints': {
67
+ repo_id: 'huggingface/hf-endpoints-documentation',
68
+ doc_folder: 'docs/source'
69
+ },
70
+ 'dataset-viewer': {
71
+ repo_id: 'huggingface/dataset-viewer',
72
+ doc_folder: 'docs/source'
73
+ }
74
+ };
75
+ //# sourceMappingURL=doc-mappings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-mappings.js","sourceRoot":"","sources":["../../src/docs-search/doc-mappings.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,YAAY,EAAE;QACZ,OAAO,EAAE,wBAAwB;QACjC,UAAU,EAAE,yBAAyB;KACtC;IACD,WAAW,EAAE;QACX,OAAO,EAAE,uBAAuB;QAChC,UAAU,EAAE,gBAAgB;KAC7B;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,wBAAwB;QACjC,UAAU,EAAE,aAAa;KAC1B;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,6BAA6B;QACtC,UAAU,EAAE,gBAAgB;KAC7B;IACD,cAAc,EAAE;QACd,OAAO,EAAE,0BAA0B;QACnC,UAAU,EAAE,gBAAgB;KAC7B;IACD,KAAK,EAAE;QACL,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,UAAU;KACvB;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,MAAM;KACnB;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,6BAA6B;QACtC,UAAU,EAAE,aAAa;KAC1B;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,wBAAwB;QACjC,UAAU,EAAE,gBAAgB;KAC7B;IACD,MAAM,EAAE;QACN,OAAO,EAAE,kBAAkB;QAC3B,UAAU,EAAE,aAAa;KAC1B;IACD,KAAK,EAAE;QACL,OAAO,EAAE,iBAAiB;QAC1B,UAAU,EAAE,aAAa;KAC1B;IACD,cAAc,EAAE;QACd,OAAO,EAAE,sCAAsC;QAC/C,UAAU,EAAE,aAAa;KAC1B;IACD,SAAS,EAAE;QACT,OAAO,EAAE,qBAAqB;QAC9B,UAAU,EAAE,aAAa;KAC1B;IACD,MAAM,EAAE;QACN,OAAO,EAAE,kCAAkC;QAC3C,UAAU,EAAE,eAAe;KAC5B;IACD,qBAAqB,EAAE;QACrB,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,0BAA0B;KACvC;IACD,aAAa,EAAE;QACb,OAAO,EAAE,yBAAyB;QAClC,UAAU,EAAE,aAAa;KAC1B;IACD,qBAAqB,EAAE;QACrB,OAAO,EAAE,wCAAwC;QACjD,UAAU,EAAE,aAAa;KAC1B;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,aAAa;KAC1B;CACF,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall } from '../hf-api-call.js';
3
+ export declare const DOCS_SEMANTIC_SEARCH_CONFIG: {
4
+ readonly name: "docs_search";
5
+ readonly description: string;
6
+ readonly schema: z.ZodObject<{
7
+ query: z.ZodString;
8
+ product: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ query: string;
11
+ product?: string | undefined;
12
+ }, {
13
+ query: string;
14
+ product?: string | undefined;
15
+ }>;
16
+ readonly annotations: {
17
+ readonly title: "Hugging Face Documentation Search";
18
+ readonly destructiveHint: false;
19
+ readonly readOnlyHint: true;
20
+ readonly openWorldHint: true;
21
+ };
22
+ };
23
+ export type DocSearchParams = z.infer<typeof DOCS_SEMANTIC_SEARCH_CONFIG.schema>;
24
+ interface DocSearchResult {
25
+ text: string;
26
+ product: string;
27
+ heading1: string;
28
+ source_page_url: string;
29
+ source_page_title: string;
30
+ heading2?: string;
31
+ }
32
+ interface DocSearchApiParams {
33
+ q: string;
34
+ product?: string;
35
+ }
36
+ export declare class DocSearchTool extends HfApiCall<DocSearchApiParams, DocSearchResult[]> {
37
+ constructor(hfToken?: string, apiUrl?: string);
38
+ search(query: string, product?: string): Promise<string>;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=docs-semantic-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-semantic-search.d.ts","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI9C,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;CAsB9B,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEjF,UAAU,eAAe;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC;gBAKtE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,SAAkC;IAQhE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB9D"}
@@ -0,0 +1,138 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall } from '../hf-api-call.js';
3
+ import { escapeMarkdown } from '../utilities.js';
4
+ import { DOC_FETCH_CONFIG } from './doc-fetch.js';
5
+ export const DOCS_SEMANTIC_SEARCH_CONFIG = {
6
+ name: 'docs_search',
7
+ description: 'Search the Hugging Face documentation library with semantic search. Returns documentation excerpts ' +
8
+ 'grouped by Product and document page.',
9
+ schema: z.object({
10
+ query: z
11
+ .string()
12
+ .min(3, 'Supply at least one search term')
13
+ .max(200, 'Query too long')
14
+ .describe('Semantic search query'),
15
+ product: z
16
+ .string()
17
+ .optional()
18
+ .describe('Filter by specific product (e.g., "hub", "dataset-viewer", "transformers")'),
19
+ }),
20
+ annotations: {
21
+ title: 'Hugging Face Documentation Search',
22
+ destructiveHint: false,
23
+ readOnlyHint: true,
24
+ openWorldHint: true,
25
+ },
26
+ };
27
+ export class DocSearchTool extends HfApiCall {
28
+ constructor(hfToken, apiUrl = 'https://hf.co/api/docs/search') {
29
+ super(apiUrl, hfToken);
30
+ }
31
+ async search(query, product) {
32
+ try {
33
+ if (!query)
34
+ return 'No query provided';
35
+ const params = { q: query.toLowerCase() };
36
+ if (product) {
37
+ params.product = product;
38
+ }
39
+ const results = await this.callApi(params);
40
+ if (results.length === 0) {
41
+ return product
42
+ ? `No documentation found for query '${query}' in product '${product}'`
43
+ : `No documentation found for query '${query}'`;
44
+ }
45
+ return formatSearchResults(query, results, product);
46
+ }
47
+ catch (error) {
48
+ if (error instanceof Error) {
49
+ throw new Error(`Failed to search documentation: ${error.message}`);
50
+ }
51
+ throw error;
52
+ }
53
+ }
54
+ }
55
+ function groupResults(results) {
56
+ const grouped = new Map();
57
+ for (const result of results) {
58
+ if (!grouped.has(result.product)) {
59
+ grouped.set(result.product, new Map());
60
+ }
61
+ const productGroup = grouped.get(result.product);
62
+ if (!productGroup)
63
+ continue;
64
+ if (!productGroup.has(result.source_page_url)) {
65
+ productGroup.set(result.source_page_url, []);
66
+ }
67
+ const pageResults = productGroup.get(result.source_page_url);
68
+ if (pageResults) {
69
+ pageResults.push(result);
70
+ }
71
+ }
72
+ return grouped;
73
+ }
74
+ function formatExcerpt(result) {
75
+ const lines = [];
76
+ if (result.heading2) {
77
+ lines.push(`**Excerpt from "${escapeMarkdown(result.heading2)}":**`);
78
+ }
79
+ const cleanText = result.text
80
+ .replace(/<[^>]*>/g, '')
81
+ .replace(/\n\s*\n/g, '\n')
82
+ .trim();
83
+ lines.push(cleanText);
84
+ lines.push('');
85
+ return lines.join('\n');
86
+ }
87
+ function formatSearchResults(query, results, productFilter) {
88
+ const lines = [];
89
+ const filterText = productFilter ? ` (filtered by product: ${productFilter})` : '';
90
+ lines.push(`# Documentation Search Results for "${escapeMarkdown(query)}"${filterText}`);
91
+ lines.push('');
92
+ lines.push(`Found ${results.length} results`);
93
+ lines.push('');
94
+ const grouped = groupResults(results);
95
+ const sortedProducts = Array.from(grouped.keys()).sort((a, b) => {
96
+ const productGroupA = grouped.get(a);
97
+ const productGroupB = grouped.get(b);
98
+ if (!productGroupA || !productGroupB)
99
+ return 0;
100
+ const countA = Array.from(productGroupA.values()).reduce((sum, arr) => sum + arr.length, 0);
101
+ const countB = Array.from(productGroupB.values()).reduce((sum, arr) => sum + arr.length, 0);
102
+ return countB - countA;
103
+ });
104
+ for (const product of sortedProducts) {
105
+ const productGroup = grouped.get(product);
106
+ if (!productGroup)
107
+ continue;
108
+ const totalProductHits = Array.from(productGroup.values()).reduce((sum, arr) => sum + arr.length, 0);
109
+ lines.push(`## Results for Product: ${escapeMarkdown(product)} (${totalProductHits} results)`);
110
+ lines.push('');
111
+ const sortedUrls = Array.from(productGroup.keys()).sort((a, b) => {
112
+ const pageResultsA = productGroup.get(a);
113
+ const pageResultsB = productGroup.get(b);
114
+ if (!pageResultsA || !pageResultsB)
115
+ return 0;
116
+ return pageResultsB.length - pageResultsA.length;
117
+ });
118
+ for (const url of sortedUrls) {
119
+ const pageResults = productGroup.get(url);
120
+ if (!pageResults || pageResults.length === 0)
121
+ continue;
122
+ const firstResult = pageResults[0];
123
+ if (!firstResult)
124
+ continue;
125
+ const pageTitle = firstResult.heading1 || firstResult.source_page_title;
126
+ const hitCount = pageResults.length > 1 ? ` (${pageResults.length} results)` : '';
127
+ lines.push(`### Results from [${escapeMarkdown(pageTitle)}](${url})${hitCount}`);
128
+ lines.push('');
129
+ for (const result of pageResults) {
130
+ lines.push(formatExcerpt(result));
131
+ }
132
+ }
133
+ }
134
+ lines.push('---');
135
+ lines.push(`Use the "${DOC_FETCH_CONFIG.name}" tool to download a specific document.`);
136
+ return lines.join('\n');
137
+ }
138
+ //# sourceMappingURL=docs-semantic-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-semantic-search.js","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=docs-semantic-search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-semantic-search.test.d.ts","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.test.ts"],"names":[],"mappings":""}