import { z } from 'zod';
import { AsicService } from '../types/index.js';
import { zodToJsonSchema } from 'zod-to-json-schema';
const FindAsicServicesSchema = z.object({
serviceType: z.string().describe('Service type (e.g., design, verification, manufacturing, packaging)'),
technology: z.string().optional().describe('Technology node or specification'),
capabilities: z.array(z.string()).optional().describe('Required capabilities'),
region: z.string().optional().describe('Geographic region preference'),
limit: z.number().optional().default(10).describe('Maximum number of results'),
});
type FindAsicServicesArgs = z.infer<typeof FindAsicServicesSchema>;
export const findAsicServicesTool = {
definition: {
name: 'find_asic_services',
description: 'Find ASIC design and manufacturing services',
inputSchema: zodToJsonSchema(FindAsicServicesSchema) as any,
},
handler: async (args: unknown) => {
const parsed = FindAsicServicesSchema.parse(args);
// TODO: Implement actual web scraping logic
// For now, return mock data
const mockServices: AsicService[] = [
{
provider: 'eInfochips',
serviceType: 'design',
technology: '7nm',
description: 'Full ASIC design services from RTL to GDSII',
capabilities: ['RTL design', 'Physical design', 'DFT', 'Verification'],
website: 'https://www.einfochips.com',
},
{
provider: 'Wipro',
serviceType: 'verification',
technology: 'All nodes',
description: 'Comprehensive verification services including UVM',
capabilities: ['Functional verification', 'Formal verification', 'Emulation'],
website: 'https://www.wipro.com',
},
{
provider: 'GUC',
serviceType: 'manufacturing',
technology: '5nm',
description: 'TSMC-certified ASIC manufacturing partner',
capabilities: ['Turnkey', 'COT', 'Risk production'],
website: 'https://www.guc-asic.com',
},
];
// Filter based on service type
let results = mockServices.filter(service =>
service.serviceType === parsed.serviceType ||
parsed.serviceType === 'all'
);
// Apply limit
results = results.slice(0, parsed.limit);
return {
content: [
{
type: 'text',
text: `Found ${results.length} ASIC services matching your criteria:\n\n` +
results.map((service, i) =>
`${i + 1}. ${service.provider}\n` +
` Service: ${service.serviceType}\n` +
` Technology: ${service.technology}\n` +
` Capabilities: ${service.capabilities?.join(', ')}\n`
).join('\n'),
},
],
data: results,
};
},
};