UNPKG

sarvam-mcp

Version:

An MCP server exposing Sarvam AI tools and a documentation retriever.

154 lines (140 loc) 5.59 kB
import fetch from 'node-fetch'; /** * Maps generic language codes to specific regional codes. * @param {string} langCode - The input language code. * @returns {string} - The mapped language code. */ const mapLanguageCode = (langCode) => { if (typeof langCode !== 'string') return langCode; const lowerLangCode = langCode.toLowerCase(); if (lowerLangCode === 'en') return 'en-IN'; if (lowerLangCode === 'hi') return 'hi-IN'; // Add other mappings as needed return langCode; // Return original if no mapping found }; /** * Function to transliterate text from one script to another using Sarvam API (via direct API call). * * @param {Object} args - Arguments for the transliteration. * @param {string} args.input_text - The text to transliterate (<=1000 characters). * @param {string} args.source_language_code - Language code of the input text. * @param {string} args.target_language_code - Language code for the transliterated text. * @param {string} [args.numerals_format] - Optional. 'international' (default) or 'native'. * @param {string} [args.spoken_form_numerals_language] - Optional. 'english' or 'native' (default). Only works if spoken_form is true. * @param {boolean} [args.spoken_form] - Optional. Defaults to false. Converts text to natural spoken form if true. * @returns {Promise<Object>} - The result of the transliteration. */ const executeFunction = async ({ input_text, source_language_code, target_language_code, numerals_format, spoken_form_numerals_language, spoken_form }) => { const apiKey = process.env.SARVAM_API_KEY; const baseUrl = 'https://api.sarvam.ai/transliterate'; const final_source_language_code = mapLanguageCode(source_language_code); const final_target_language_code = mapLanguageCode(target_language_code); if (!apiKey) { console.error('SARVAM_API_KEY environment variable is not set'); return { error: 'SARVAM_API_KEY environment variable is not set', details: 'Please make sure you have set the SARVAM_API_KEY environment variable with your Sarvam API key.' }; } if (!input_text || !final_source_language_code || !final_target_language_code) { let missingParams = []; if (!input_text) missingParams.push('input_text'); if (!final_source_language_code) missingParams.push('source_language_code'); if (!final_target_language_code) missingParams.push('target_language_code'); return { error: `Missing required parameter(s): ${missingParams.join(', ')}`, details: 'input_text, source_language_code, and target_language_code are required.' }; } try { const headers = { 'api-subscription-key': apiKey, 'Content-Type': 'application/json' }; const payload = { input: input_text, source_language_code: final_source_language_code, target_language_code: final_target_language_code }; if (numerals_format !== undefined) payload.numerals_format = numerals_format; if (spoken_form_numerals_language !== undefined) payload.spoken_form_numerals_language = spoken_form_numerals_language; if (spoken_form !== undefined) payload.spoken_form = spoken_form; const response = await fetch(baseUrl, { method: 'POST', headers: headers, body: JSON.stringify(payload) }); let data; try { data = await response.json(); } catch (e) { data = await response.text(); } if (!response.ok) { console.error('API Error Response:', data); const errorMessage = typeof data === 'string' ? data : JSON.stringify(data, null, 2); throw new Error(errorMessage); } return data; } catch (error) { console.error('Error transliterating text:', error && (error.stack || error.message || error)); return { error: 'An error occurred while transliterating text.', details: error && (error.message || error.toString()) }; } }; /** * Tool configuration for transliterating text using Sarvam API. * @type {Object} */ const apiTool = { function: executeFunction, definition: { type: 'function', function: { name: 'transliterate_text', description: 'Transliterates text from one script to another using Sarvam API, preserving pronunciation.', parameters: { type: 'object', properties: { input_text: { type: 'string', description: 'The text to transliterate (<=1000 characters).' }, source_language_code: { type: 'string', description: 'Language code of the input text (e.g., en-IN, hi-IN).' // enum values can be added here if known and fixed }, target_language_code: { type: 'string', description: 'Language code for the transliterated text (e.g., en-IN, hi-IN).' // enum values can be added here if known and fixed }, numerals_format: { type: 'string', description: "Optional. Numerals format: 'international' (default) or 'native'." }, spoken_form_numerals_language: { type: 'string', description: "Optional. Spoken form numerals language: 'english' or 'native' (default). Only if spoken_form is true." }, spoken_form: { type: 'boolean', description: 'Optional. Defaults to false. Converts text to natural spoken form if true.' } }, required: ['input_text', 'source_language_code', 'target_language_code'] } } } }; export { apiTool };