@llmindset/hf-mcp 0.1.16

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/dist/dataset-detail.d.ts +26 -0
  3. package/dist/dataset-detail.d.ts.map +1 -0
  4. package/dist/dataset-detail.js +157 -0
  5. package/dist/dataset-detail.js.map +1 -0
  6. package/dist/dataset-search.d.ts +62 -0
  7. package/dist/dataset-search.d.ts.map +1 -0
  8. package/dist/dataset-search.js +158 -0
  9. package/dist/dataset-search.js.map +1 -0
  10. package/dist/duplicate-space.d.ts +75 -0
  11. package/dist/duplicate-space.d.ts.map +1 -0
  12. package/dist/duplicate-space.js +189 -0
  13. package/dist/duplicate-space.js.map +1 -0
  14. package/dist/error-messages.d.ts +4 -0
  15. package/dist/error-messages.d.ts.map +1 -0
  16. package/dist/error-messages.js +30 -0
  17. package/dist/error-messages.js.map +1 -0
  18. package/dist/hf-api-call.d.ts +18 -0
  19. package/dist/hf-api-call.d.ts.map +1 -0
  20. package/dist/hf-api-call.js +105 -0
  21. package/dist/hf-api-call.js.map +1 -0
  22. package/dist/index.d.ts +16 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +16 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/model-detail.d.ts +26 -0
  27. package/dist/model-detail.d.ts.map +1 -0
  28. package/dist/model-detail.js +224 -0
  29. package/dist/model-detail.js.map +1 -0
  30. package/dist/model-search.d.ts +64 -0
  31. package/dist/model-search.d.ts.map +1 -0
  32. package/dist/model-search.js +161 -0
  33. package/dist/model-search.js.map +1 -0
  34. package/dist/paper-search.d.ts +58 -0
  35. package/dist/paper-search.d.ts.map +1 -0
  36. package/dist/paper-search.js +114 -0
  37. package/dist/paper-search.js.map +1 -0
  38. package/dist/paper-summary.d.ts +35 -0
  39. package/dist/paper-summary.d.ts.map +1 -0
  40. package/dist/paper-summary.js +187 -0
  41. package/dist/paper-summary.js.map +1 -0
  42. package/dist/space-files.d.ts +44 -0
  43. package/dist/space-files.d.ts.map +1 -0
  44. package/dist/space-files.js +242 -0
  45. package/dist/space-files.js.map +1 -0
  46. package/dist/space-info.d.ts +56 -0
  47. package/dist/space-info.d.ts.map +1 -0
  48. package/dist/space-info.js +135 -0
  49. package/dist/space-info.js.map +1 -0
  50. package/dist/space-search.d.ts +71 -0
  51. package/dist/space-search.d.ts.map +1 -0
  52. package/dist/space-search.js +95 -0
  53. package/dist/space-search.js.map +1 -0
  54. package/dist/tool-ids.d.ts +23 -0
  55. package/dist/tool-ids.d.ts.map +1 -0
  56. package/dist/tool-ids.js +55 -0
  57. package/dist/tool-ids.js.map +1 -0
  58. package/dist/user-summary.d.ts +56 -0
  59. package/dist/user-summary.d.ts.map +1 -0
  60. package/dist/user-summary.js +271 -0
  61. package/dist/user-summary.js.map +1 -0
  62. package/dist/utilities.d.ts +8 -0
  63. package/dist/utilities.d.ts.map +1 -0
  64. package/dist/utilities.js +53 -0
  65. package/dist/utilities.js.map +1 -0
  66. package/eslint.config.js +43 -0
  67. package/package.json +47 -0
  68. package/src/dataset-detail.ts +257 -0
  69. package/src/dataset-search.ts +237 -0
  70. package/src/duplicate-space.ts +263 -0
  71. package/src/error-messages.ts +57 -0
  72. package/src/hf-api-call.ts +182 -0
  73. package/src/index.ts +18 -0
  74. package/src/model-detail.ts +359 -0
  75. package/src/model-search.ts +231 -0
  76. package/src/paper-search.ts +188 -0
  77. package/src/paper-summary.ts +303 -0
  78. package/src/space-files.ts +325 -0
  79. package/src/space-info.ts +190 -0
  80. package/src/space-search.ts +177 -0
  81. package/src/tool-ids.ts +84 -0
  82. package/src/user-summary.ts +421 -0
  83. package/src/utilities.ts +64 -0
  84. package/test/duplicate-space.spec.ts +41 -0
  85. package/test/fixtures/paper_result_kazakh.json +854 -0
  86. package/test/fixtures/space-result.json +263 -0
  87. package/test/paper-search.spec.ts +57 -0
  88. package/test/paper-summary.spec.ts +113 -0
  89. package/test/space-files.spec.ts +232 -0
  90. package/test/space-search.spec.ts +29 -0
  91. package/test/user-summary.spec.ts +131 -0
  92. package/tsconfig.json +31 -0
  93. package/vitest.config.ts +11 -0
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall } from './hf-api-call.js';
3
+ import { explain } from './error-messages.js';
4
+ import { NO_TOKEN_INSTRUCTIONS } from './utilities.js';
5
+ export const DUPLICATE_SPACE_TOOL_CONFIG = {
6
+ name: 'duplicate_space',
7
+ description: '',
8
+ schema: z.object({
9
+ sourceSpaceId: z.string().min(1).describe("Space ID to copy (e.g., 'username/space-name')"),
10
+ newSpaceId: z.string().optional().describe('Name for the new space (optional, defaults to source space-name)'),
11
+ hardware: z
12
+ .enum(['freecpu', 'zerogpu'])
13
+ .optional()
14
+ .describe('Either "freecpu" or "zerogpu" (defaults based on source). Both options are in the free tier.'),
15
+ private: z
16
+ .boolean()
17
+ .optional()
18
+ .default(true)
19
+ .describe('Check with User whether the new space should be public or private.'),
20
+ }),
21
+ annotations: {
22
+ title: 'Duplicate Hugging Face Space',
23
+ destructiveHint: false,
24
+ readOnlyHint: false,
25
+ openWorldHint: true,
26
+ },
27
+ };
28
+ const HARDWARE_MAP = {
29
+ freecpu: 'cpu-basic',
30
+ zerogpu: 'zero-a10g',
31
+ };
32
+ const FREE_HARDWARE = ['cpu-basic', 'zero-a10g'];
33
+ export class DuplicateSpaceTool extends HfApiCall {
34
+ username;
35
+ constructor(hfToken, username) {
36
+ super('https://huggingface.co/api', hfToken);
37
+ this.username = username;
38
+ }
39
+ static createToolConfig(username) {
40
+ const description = username
41
+ ? `Duplicate a Hugging Face Space. Target space will be created as ${username}/<new-space-name>.`
42
+ : NO_TOKEN_INSTRUCTIONS;
43
+ return {
44
+ ...DUPLICATE_SPACE_TOOL_CONFIG,
45
+ description,
46
+ };
47
+ }
48
+ normalizeSpaceName(spaceName) {
49
+ if (spaceName.includes('/')) {
50
+ const [providedUser, spaceNamePart] = spaceName.split('/');
51
+ if (providedUser !== this.username) {
52
+ throw new Error(`Invalid space ID: ${spaceName}. You can only create spaces in your own namespace. Try "${this.username || 'your-username'}/${spaceNamePart || 'space-name'}"`);
53
+ }
54
+ return spaceName;
55
+ }
56
+ return `${this.username || 'unknown'}/${spaceName}`;
57
+ }
58
+ async getSpaceInfo(spaceId) {
59
+ const url = `${this.apiUrl}/spaces/${spaceId}`;
60
+ return this.fetchFromApi(url);
61
+ }
62
+ async getSpaceVariables(spaceId) {
63
+ const url = `${this.apiUrl}/spaces/${spaceId}/variables`;
64
+ try {
65
+ return await this.fetchFromApi(url);
66
+ }
67
+ catch {
68
+ return {};
69
+ }
70
+ }
71
+ async duplicate(params) {
72
+ const { sourceSpaceId, newSpaceName, hardware, private: isPrivate = true } = params;
73
+ if (!this.username)
74
+ throw new Error(NO_TOKEN_INSTRUCTIONS);
75
+ try {
76
+ let sourceInfo;
77
+ try {
78
+ sourceInfo = await this.getSpaceInfo(sourceSpaceId);
79
+ }
80
+ catch (error) {
81
+ throw explain(error, `Could not access source space "${sourceSpaceId}"`);
82
+ }
83
+ const sourceVars = await this.getSpaceVariables(sourceSpaceId);
84
+ const variables = Object.entries(sourceVars).map(([key, varInfo]) => ({
85
+ key,
86
+ value: varInfo.value,
87
+ description: varInfo.description,
88
+ }));
89
+ let sourceHardwareStr;
90
+ if (typeof sourceInfo.runtime?.hardware === 'object') {
91
+ sourceHardwareStr = sourceInfo.runtime.hardware.current || sourceInfo.runtime.hardware.requested;
92
+ }
93
+ else {
94
+ sourceHardwareStr = sourceInfo.runtime?.hardware;
95
+ }
96
+ let selectedHardware;
97
+ let hardwareKey;
98
+ if (hardware) {
99
+ selectedHardware = HARDWARE_MAP[hardware];
100
+ hardwareKey = hardware;
101
+ }
102
+ else {
103
+ if (sourceHardwareStr === 'zero-a10g') {
104
+ selectedHardware = 'zero-a10g';
105
+ hardwareKey = 'zerogpu';
106
+ }
107
+ else if (sourceHardwareStr === 'cpu-basic' || !sourceHardwareStr) {
108
+ selectedHardware = 'cpu-basic';
109
+ hardwareKey = 'freecpu';
110
+ }
111
+ else {
112
+ selectedHardware = 'zero-a10g';
113
+ hardwareKey = 'zerogpu';
114
+ }
115
+ }
116
+ let targetId;
117
+ if (newSpaceName) {
118
+ targetId = this.normalizeSpaceName(newSpaceName);
119
+ }
120
+ else {
121
+ const sourceName = sourceSpaceId.split('/')[1];
122
+ targetId = `${this.username}/${sourceName || ''}`;
123
+ }
124
+ let hardwareWarning;
125
+ if (sourceHardwareStr && !FREE_HARDWARE.includes(sourceHardwareStr)) {
126
+ hardwareWarning = `Note: The source space uses '${sourceHardwareStr}' which is paid hardware. Your duplicated space is set to '${hardwareKey}'. "+
127
+ "You may need to upgrade in Settings to run this space or achieve the same performance.`;
128
+ }
129
+ let gatedWarning;
130
+ if (sourceInfo.gated) {
131
+ gatedWarning = `🔐 The model in this space is 'gated' - you may need to accept the licensing conditions before use.`;
132
+ }
133
+ const url = `${this.apiUrl}/spaces/${sourceSpaceId}/duplicate`;
134
+ const payload = {
135
+ repository: targetId,
136
+ private: isPrivate,
137
+ hardware: selectedHardware,
138
+ variables: variables.length > 0 ? variables : undefined,
139
+ };
140
+ const response = await this.fetchFromApi(url, {
141
+ method: 'POST',
142
+ body: JSON.stringify(payload),
143
+ });
144
+ const warnings = [];
145
+ if (hardwareWarning)
146
+ warnings.push(hardwareWarning);
147
+ if (gatedWarning)
148
+ warnings.push(gatedWarning);
149
+ const result = {
150
+ url: response.url,
151
+ spaceId: targetId,
152
+ hardware: hardwareKey,
153
+ private: isPrivate,
154
+ variablesCopied: variables.length,
155
+ instructions: this.formatInstructions(response.url, hardwareKey, isPrivate, warnings),
156
+ };
157
+ if (hardwareWarning) {
158
+ result.hardwareWarning = hardwareWarning;
159
+ }
160
+ return result;
161
+ }
162
+ catch (error) {
163
+ throw explain(error, 'Failed to duplicate space');
164
+ }
165
+ }
166
+ formatInstructions(url, hardware, isPrivate, warnings) {
167
+ let instructions = `✅ 🤗 Space successfully duplicated!
168
+
169
+ 🔗 Your new space: ${url}
170
+
171
+ ⚙️ To configure your space:
172
+ 1. Go to ${url}
173
+ 2. Click on 'Settings' in the top right
174
+ 3. Configure any additional settings as needed
175
+
176
+ Hardware: ${hardware} | Visibility: ${isPrivate ? 'Private' : 'Public'}`;
177
+ if (warnings.length > 0) {
178
+ instructions += '\n\n⚠️ Warnings:';
179
+ warnings.forEach((warning) => {
180
+ instructions += `\n- ${warning}`;
181
+ });
182
+ }
183
+ return instructions;
184
+ }
185
+ }
186
+ export const formatDuplicateResult = (result) => {
187
+ return result.instructions;
188
+ };
189
+ //# sourceMappingURL=duplicate-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicate-space.js","sourceRoot":"","sources":["../src/duplicate-space.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const FRIENDLY_ERROR_EXPLANATIONS: Record<number, string>;
2
+ export declare function getFriendlyExplanation(status: number): string;
3
+ export declare function explain(error: unknown, context?: string): unknown;
4
+ //# sourceMappingURL=error-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-messages.d.ts","sourceRoot":"","sources":["../src/error-messages.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW9D,CAAC;AAKF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa7D;AASD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CASjE"}
@@ -0,0 +1,30 @@
1
+ import { HfApiError } from './hf-api-call.js';
2
+ export const FRIENDLY_ERROR_EXPLANATIONS = {
3
+ 400: 'The request was invalid. Check your HF_TOKEN permissions, or that you have not exceeded the maximum number of spaces allowed..',
4
+ 401: 'Authentication failed. Please check that your Hugging Face token is valid. Check your Hugging Face token permissions.',
5
+ 403: 'You do not have permission to access this resource. Check your Hugging Face token permissions.',
6
+ 404: 'The requested resource does not exist.',
7
+ 409: 'A resource with this name already exists.',
8
+ 422: 'The provided configuration is invalid.',
9
+ 429: 'Duplication failed due to rate limits.',
10
+ 500: 'Hugging Face is experiencing issues. Please try again later.',
11
+ 502: 'The server gateway is temporarily unavailable.',
12
+ 503: 'The service is temporarily down for maintenance.',
13
+ };
14
+ export function getFriendlyExplanation(status) {
15
+ if (FRIENDLY_ERROR_EXPLANATIONS[status]) {
16
+ return FRIENDLY_ERROR_EXPLANATIONS[status];
17
+ }
18
+ if (status >= 500) {
19
+ return 'Hugging Face is experiencing issues. Please try again later.';
20
+ }
21
+ return 'An unexpected error occurred. Please try again.';
22
+ }
23
+ export function explain(error, context) {
24
+ if (error instanceof HfApiError) {
25
+ const friendlyExplanation = getFriendlyExplanation(error.status);
26
+ return error.withImprovedMessage(friendlyExplanation, context);
27
+ }
28
+ return error;
29
+ }
30
+ //# sourceMappingURL=error-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-messages.js","sourceRoot":"","sources":["../src/error-messages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK9C,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IAClE,GAAG,EAAE,gIAAgI;IACrI,GAAG,EAAE,uHAAuH;IAC5H,GAAG,EAAE,gGAAgG;IACrG,GAAG,EAAE,wCAAwC;IAC7C,GAAG,EAAE,2CAA2C;IAChD,GAAG,EAAE,wCAAwC;IAC7C,GAAG,EAAE,wCAAwC;IAC7C,GAAG,EAAE,8DAA8D;IACnE,GAAG,EAAE,gDAAgD;IACrD,GAAG,EAAE,kDAAkD;CACvD,CAAC;AAKF,MAAM,UAAU,sBAAsB,CAAC,MAAc;IAEpD,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAGD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACnB,OAAO,8DAA8D,CAAC;IACvE,CAAC;IAGD,OAAO,iDAAiD,CAAC;AAC1D,CAAC;AASD,MAAM,UAAU,OAAO,CAAC,KAAc,EAAE,OAAgB;IAEvD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QACjC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAGD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare class HfApiError extends Error {
2
+ readonly status: number;
3
+ readonly statusText: string;
4
+ readonly responseBody?: string | undefined;
5
+ constructor(message: string, status: number, statusText: string, responseBody?: string | undefined);
6
+ formatWithExplanation(friendlyExplanation: string, context?: string): string;
7
+ withImprovedMessage(friendlyExplanation: string, context?: string): HfApiError;
8
+ }
9
+ export declare class HfApiCall<TParams = Record<string, string | undefined>, TResponse = unknown> {
10
+ protected readonly apiUrl: string;
11
+ protected readonly hfToken: string | undefined;
12
+ protected readonly apiTimeout: number;
13
+ constructor(apiUrl: string, hfToken?: string);
14
+ protected fetchFromApi<T = TResponse>(url: URL | string, options?: globalThis.RequestInit): Promise<T>;
15
+ protected buildUrl(params: TParams): URL;
16
+ protected callApi<T = TResponse>(params: TParams, options?: globalThis.RequestInit): Promise<T>;
17
+ }
18
+ //# sourceMappingURL=hf-api-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-api-call.d.ts","sourceRoot":"","sources":["../src/hf-api-call.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAW,SAAQ,KAAK;aAGnB,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,YAAY,CAAC,EAAE,MAAM;gBAHrC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,YAAA;IAYtC,qBAAqB,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAuC5E,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;CAI9E;AAQD,qBAAa,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO;IACvF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAG1B,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;cAe5B,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA+D5G,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG;cAsBxB,OAAO,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;CAIrG"}
@@ -0,0 +1,105 @@
1
+ export class HfApiError extends Error {
2
+ status;
3
+ statusText;
4
+ responseBody;
5
+ constructor(message, status, statusText, responseBody) {
6
+ super(message);
7
+ this.status = status;
8
+ this.statusText = statusText;
9
+ this.responseBody = responseBody;
10
+ this.name = 'HfApiError';
11
+ }
12
+ formatWithExplanation(friendlyExplanation, context) {
13
+ let formatted = '';
14
+ if (context) {
15
+ formatted = `${context}. `;
16
+ }
17
+ formatted += friendlyExplanation;
18
+ formatted += `\n\n${this.message}`;
19
+ if (this.responseBody) {
20
+ try {
21
+ const parsed = JSON.parse(this.responseBody);
22
+ const errorDetail = parsed.error || parsed.message || parsed.detail;
23
+ if (errorDetail && !this.message.includes(errorDetail)) {
24
+ formatted += `\n${errorDetail}`;
25
+ }
26
+ }
27
+ catch {
28
+ if (this.responseBody.length < 200 && !this.message.includes(this.responseBody)) {
29
+ formatted += `\n${this.responseBody}`;
30
+ }
31
+ }
32
+ }
33
+ return formatted;
34
+ }
35
+ withImprovedMessage(friendlyExplanation, context) {
36
+ const improvedMessage = this.formatWithExplanation(friendlyExplanation, context);
37
+ return new HfApiError(improvedMessage, this.status, this.statusText, this.responseBody);
38
+ }
39
+ }
40
+ export class HfApiCall {
41
+ apiUrl;
42
+ hfToken;
43
+ apiTimeout;
44
+ constructor(apiUrl, hfToken) {
45
+ this.apiUrl = apiUrl;
46
+ this.hfToken = hfToken;
47
+ this.apiTimeout = process.env.HF_API_TIMEOUT ? parseInt(process.env.HF_API_TIMEOUT, 10) : 12500;
48
+ }
49
+ async fetchFromApi(url, options) {
50
+ try {
51
+ const headers = {
52
+ Accept: 'application/json',
53
+ ...(options?.headers || {}),
54
+ };
55
+ if (this.hfToken) {
56
+ headers['Authorization'] = `Bearer ${this.hfToken}`;
57
+ }
58
+ const controller = new AbortController();
59
+ const timeoutId = setTimeout(() => controller.abort(), this.apiTimeout);
60
+ const response = await fetch(url.toString(), {
61
+ ...options,
62
+ headers,
63
+ signal: controller.signal,
64
+ });
65
+ clearTimeout(timeoutId);
66
+ if (!response.ok) {
67
+ let responseBody;
68
+ try {
69
+ responseBody = await response.text();
70
+ }
71
+ catch {
72
+ }
73
+ throw new HfApiError(`API request failed: ${response.status.toString()} ${response.statusText}`, response.status, response.statusText, responseBody);
74
+ }
75
+ return (await response.json());
76
+ }
77
+ catch (error) {
78
+ if (error instanceof HfApiError) {
79
+ throw error;
80
+ }
81
+ if (error instanceof Error && error.name === 'AbortError') {
82
+ throw new Error(`API request timed out after ${this.apiTimeout}ms`);
83
+ }
84
+ if (error instanceof Error) {
85
+ throw new Error(`API request failed: ${error.message}`);
86
+ }
87
+ throw error;
88
+ }
89
+ }
90
+ buildUrl(params) {
91
+ const url = new URL(this.apiUrl);
92
+ for (const key in params) {
93
+ const value = params[key];
94
+ if (value !== undefined) {
95
+ url.searchParams.append(key, String(value));
96
+ }
97
+ }
98
+ return url;
99
+ }
100
+ async callApi(params, options) {
101
+ const url = this.buildUrl(params);
102
+ return this.fetchFromApi(url, options);
103
+ }
104
+ }
105
+ //# sourceMappingURL=hf-api-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-api-call.js","sourceRoot":"","sources":["../src/hf-api-call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from './hf-api-call.js';
2
+ export * from './error-messages.js';
3
+ export * from './space-search.js';
4
+ export * from './model-search.js';
5
+ export * from './model-detail.js';
6
+ export * from './utilities.js';
7
+ export * from './paper-search.js';
8
+ export * from './dataset-search.js';
9
+ export * from './dataset-detail.js';
10
+ export * from './duplicate-space.js';
11
+ export * from './space-info.js';
12
+ export * from './space-files.js';
13
+ export * from './user-summary.js';
14
+ export * from './paper-summary.js';
15
+ export * from './tool-ids.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from './hf-api-call.js';
2
+ export * from './error-messages.js';
3
+ export * from './space-search.js';
4
+ export * from './model-search.js';
5
+ export * from './model-detail.js';
6
+ export * from './utilities.js';
7
+ export * from './paper-search.js';
8
+ export * from './dataset-search.js';
9
+ export * from './dataset-detail.js';
10
+ export * from './duplicate-space.js';
11
+ export * from './space-info.js';
12
+ export * from './space-files.js';
13
+ export * from './user-summary.js';
14
+ export * from './paper-summary.js';
15
+ export * from './tool-ids.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ export declare const MODEL_DETAIL_TOOL_CONFIG: {
3
+ readonly name: "model_details";
4
+ readonly description: "Get detailed information about a specific model from the Hugging Face Hub.";
5
+ readonly schema: z.ZodObject<{
6
+ model_id: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ model_id: string;
9
+ }, {
10
+ model_id: string;
11
+ }>;
12
+ readonly annotations: {
13
+ readonly title: "Model Details";
14
+ readonly destructiveHint: false;
15
+ readonly readOnlyHint: true;
16
+ readonly openWorldHint: false;
17
+ };
18
+ };
19
+ export type ModelDetailParams = z.infer<typeof MODEL_DETAIL_TOOL_CONFIG.schema>;
20
+ export declare class ModelDetailTool {
21
+ private readonly hubUrl?;
22
+ private readonly accessToken?;
23
+ constructor(hfToken?: string, hubUrl?: string);
24
+ getDetails(modelId: string): Promise<string>;
25
+ }
26
+ //# sourceMappingURL=model-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-detail.d.ts","sourceRoot":"","sources":["../src/model-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;CAY3B,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAuDhF,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;gBAO1B,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAWvC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA+HlD"}