{"_id":"@ekipnico/ai-mesh","_rev":"4-8e8a70290e1e9471276c0b058ba05727","name":"@ekipnico/ai-mesh","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@ekipnico/ai-mesh","version":"1.0.0","author":{"name":"Ekipnico"},"license":"ISC","_id":"@ekipnico/ai-mesh@1.0.0","maintainers":[{"name":"christellevs","email":"christelle.marie@gmail.com"},{"name":"equipinico","email":"ekipnico@gmail.com"}],"dist":{"shasum":"0479a5f80a551ac7f8feeb240e7023b2d7cf3166","tarball":"https://registry.npmjs.org/@ekipnico/ai-mesh/-/ai-mesh-1.0.0.tgz","fileCount":61,"integrity":"sha512-6Elk81p9DomHGhd+UJFX9AGAQMG0Vgc28ch2WiKgRVTzfKrdfFLJpsLRZSvkNDDlDP0ckbnRn66/qJ1AiiNQiA==","signatures":[{"sig":"MEUCIQCmjWRVVDbE18XTQDS2l4TI9mGRPOwoYTZUmltwWmJXtgIge3TSC/PjWhSjfNMLX3bXh56KheZXmUqpEJb+0ah5EWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72143},"main":"out/index.js","type":"module","types":"out/index.d.ts","exports":{".":{"types":"./out/index.d.ts","import":"./out/index.js"}},"gitHead":"a96e5e6001a108dfe92e89f49648948483dcc362","private":false,"scripts":{"dev":"tsc -b -w","lint":"eslint . --cache --max-warnings=0","clean":"rm -rf out/ *.tsbuildinfo","compile":"tsc -b","test:run":"npm run compile && node out/test.js","prepublishOnly":"npm run compile"},"_npmUser":{"name":"christellevs","email":"christelle.marie@gmail.com"},"_npmVersion":"10.9.4","description":"Simple, DI-native LLM service for the ekipnico ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"ai":"^4.3.16","airtight":"^5.7.2","mesh-ioc":"^4.1.0","mesh-config":"^1.2.1","@ai-sdk/google":"^1.2.4","@ai-sdk/openai":"^1.3.22","@ai-sdk/anthropic":"^1.2.12","@nodescript/microframework":"^1.15.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.4.7","eslint":"^9.17.0","typescript":"^5.7.2","@types/node":"^22.10.5","@nodescript/eslint-config":"^2.0.3"},"peerDependencies":{"zod":"^3.24.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-mesh_1.0.0_1766479205257_0.6554032344290635","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ekipnico/ai-mesh","version":"1.0.3","author":{"name":"Ekipnico"},"license":"ISC","_id":"@ekipnico/ai-mesh@1.0.3","maintainers":[{"name":"christellevs","email":"christelle.marie@gmail.com"},{"name":"equipinico","email":"ekipnico@gmail.com"}],"dist":{"shasum":"8a38fdaf47da11a6f83c1feeb71337a3d5fcfeb5","tarball":"https://registry.npmjs.org/@ekipnico/ai-mesh/-/ai-mesh-1.0.3.tgz","fileCount":61,"integrity":"sha512-y9n+q/dwnDHybCmv19JghW9qD5iX7sACNLis3zY2NNeKThs9f/4G4VTe6J2AA7o1WnV6SVTozJvB4XQw9Qd+MA==","signatures":[{"sig":"MEQCIAa5cxounRTmU6S5PckOPFf7qPI6QRPD0lb3tTmGEDibAiAwD0bOa1gcKHQUjqUfdV5B/eFDi+JEtA1WxqJmnc+wjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77915},"main":"out/index.js","type":"module","types":"out/index.d.ts","exports":{".":{"types":"./out/index.d.ts","import":"./out/index.js"}},"gitHead":"deef370c0a46b2e109e0f3ee6c317d921d05229a","private":false,"scripts":{"dev":"tsc -b -w","lint":"eslint . --cache --max-warnings=0","clean":"rm -rf out/ *.tsbuildinfo","major":"npm version major","minor":"npm version minor","patch":"npm version patch","compile":"tsc -b","test:run":"npm run compile && node out/test.js","preversion":"npm run clean && npm run compile && npm run lint","postversion":"git push origin main --tags && npm publish"},"_npmUser":{"name":"christellevs","email":"christelle.marie@gmail.com"},"_npmVersion":"10.9.4","description":"Simple, DI-native LLM service for the ekipnico ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"ai":"^4.3.16","zod":"^3.24.0","airtight":"^5.7.2","mesh-ioc":"^4.1.0","mesh-config":"^1.2.1","@ai-sdk/google":"^1.2.4","@ai-sdk/openai":"^1.3.22","@ai-sdk/anthropic":"^1.2.12","@nodescript/microframework":"^1.15.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.4.7","eslint":"^9.17.0","typescript":"^5.7.2","@types/node":"^22.10.5","@nodescript/eslint-config":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ai-mesh_1.0.3_1766663169856_0.9784654390231615","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ekipnico/ai-mesh","version":"1.1.0","author":{"name":"Ekipnico"},"license":"ISC","_id":"@ekipnico/ai-mesh@1.1.0","maintainers":[{"name":"christellevs","email":"christelle.marie@gmail.com"},{"name":"equipinico","email":"ekipnico@gmail.com"}],"dist":{"shasum":"a72523ce884f6b92cb7cb4a9afcb9a8942a0f24c","tarball":"https://registry.npmjs.org/@ekipnico/ai-mesh/-/ai-mesh-1.1.0.tgz","fileCount":65,"integrity":"sha512-+uEjCN+8jKu9Dq2pqzFr/8woBnJ/PiXgVvlo8ncr3k7GSYt9UPCa/eyrZmLBznpyKExypNStDyUq/lze8xKnSQ==","signatures":[{"sig":"MEYCIQCBvlKgcoGYgE1RvcJ3hJkSbqjFTX8V7uT5NcX/8NAVsQIhAKci6oVVow9KnYImJl4GBvpq5yZvdqi4qiwxNtEfGPts","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88589},"main":"out/index.js","type":"module","types":"out/index.d.ts","exports":{".":{"types":"./out/index.d.ts","import":"./out/index.js"}},"gitHead":"e06fc9708d22325203b5c88e4d6856e511db9614","private":false,"scripts":{"dev":"tsc -b -w","lint":"eslint . --cache --max-warnings=0","clean":"rm -rf out/ *.tsbuildinfo","major":"npm version major","minor":"npm version minor","patch":"npm version patch","compile":"tsc -b","test:run":"npm run compile && node out/test.js","preversion":"npm run clean && npm run compile && npm run lint","postversion":"git push origin main --tags && npm publish"},"_npmUser":{"name":"christellevs","email":"christelle.marie@gmail.com"},"_npmVersion":"10.9.4","description":"Simple, DI-native LLM service for the ekipnico ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"ai":"^4.3.16","zod":"^3.24.0","airtight":"^5.7.2","mesh-ioc":"^4.1.0","mesh-config":"^1.2.1","@ai-sdk/google":"^1.2.4","@ai-sdk/openai":"^1.3.22","@ai-sdk/anthropic":"^1.2.12","@nodescript/microframework":"^1.15.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.4.7","eslint":"^9.17.0","typescript":"^5.7.2","@types/node":"^22.10.5","@nodescript/eslint-config":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ai-mesh_1.1.0_1766664969612_0.5823893101232487","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ekipnico/ai-mesh","version":"1.2.0","description":"Simple, DI-native LLM service for the ekipnico ecosystem","private":false,"publishConfig":{"access":"public"},"type":"module","sideEffects":false,"main":"out/index.js","types":"out/index.d.ts","exports":{".":{"types":"./out/index.d.ts","import":"./out/index.js"}},"scripts":{"dev":"tsc -b -w","compile":"tsc -b","lint":"eslint . --cache --max-warnings=0","clean":"rm -rf out/ *.tsbuildinfo","test:run":"npm run compile && node out/test.js","preversion":"npm run clean && npm run compile && npm run lint","postversion":"git push origin main --tags && npm publish","patch":"npm version patch","minor":"npm version minor","major":"npm version major"},"author":{"name":"Ekipnico"},"license":"ISC","dependencies":{"@ai-sdk/anthropic":"^3.0.1","@ai-sdk/google":"^3.0.1","@ai-sdk/groq":"^3.0.1","@ai-sdk/openai":"^3.0.1","@nodescript/microframework":"^1.15.3","ai":"^6.0.3","airtight":"^5.7.2","mesh-config":"^1.2.1","mesh-ioc":"^4.1.0","zod":"^3.24.0"},"devDependencies":{"@nodescript/eslint-config":"^2.0.3","@types/node":"^22.10.5","dotenv":"^16.4.7","eslint":"^9.17.0","typescript":"^5.7.2"},"_id":"@ekipnico/ai-mesh@1.2.0","gitHead":"c19e97f253a266a09b49330c153d493af66ecbdc","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-HXYNs8GG+Ye6PKYOtl6r//v71sPtBghyBShcpMj35mTAMiZOP3BILPddVkaDr5uBTUqrNJpMvhSbAsiiO0NQ1g==","shasum":"1d5c2064f218f0a6b61b375e4d8f6ae19e73b1cc","tarball":"https://registry.npmjs.org/@ekipnico/ai-mesh/-/ai-mesh-1.2.0.tgz","fileCount":66,"unpackedSize":105498,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCNaGnLPfKs+lbQdlS+BA+8LER4L9k0xebzDQi/gY3EqQIhAMCc0IbmTy/03WEZroqtxJcE9B07wxS2XMZPu6wdqa3A"}]},"_npmUser":{"name":"christellevs","email":"christelle.marie@gmail.com"},"directories":{},"maintainers":[{"name":"christellevs","email":"christelle.marie@gmail.com"},{"name":"equipinico","email":"ekipnico@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-mesh_1.2.0_1766743558726_0.5827076042652282"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-23T08:40:05.137Z","modified":"2025-12-26T10:05:59.087Z","1.0.0":"2025-12-23T08:40:05.407Z","1.0.3":"2025-12-25T11:46:10.013Z","1.1.0":"2025-12-25T12:16:09.809Z","1.2.0":"2025-12-26T10:05:58.874Z"},"author":{"name":"Ekipnico"},"license":"ISC","description":"Simple, DI-native LLM service for the ekipnico ecosystem","maintainers":[{"name":"christellevs","email":"christelle.marie@gmail.com"},{"name":"equipinico","email":"ekipnico@gmail.com"}],"readme":"# ai-mesh\n\nThin wrapper around [Vercel AI SDK](https://ai-sdk.dev) with DI support. Use **any provider** the SDK supports.\n\n## Install\n\n```bash\nnpm install @ekipnico/ai-mesh\n```\n\n## Quick Start\n\n```typescript\nimport { Mesh } from 'mesh-ioc';\nimport { LlmService, LlmProvider, VercelLlmProvider, ModelRegistry, UsageTracker } from '@ekipnico/ai-mesh';\n\nconst mesh = new Mesh('MyApp');\nmesh.service(LlmService);\nmesh.service(ModelRegistry);\nmesh.service(UsageTracker);\nmesh.service(LlmProvider, VercelLlmProvider);\n\nconst llm = mesh.resolve(LlmService);\n\nconst response = await llm.generate({\n    model: 'gpt-4o',\n    prompt: 'Hello!',\n});\n```\n\n## Using Any Provider\n\nPass any Vercel AI SDK model directly:\n\n```typescript\n// Groq\nimport { createGroq } from '@ai-sdk/groq';\nconst groq = createGroq({ apiKey: process.env.GROQ_API_KEY });\n\nawait llm.generate({\n    model: groq('llama-3.1-70b-versatile'),\n    prompt: 'Hello!',\n});\n\n// Mistral\nimport { createMistral } from '@ai-sdk/mistral';\nconst mistral = createMistral({ apiKey: process.env.MISTRAL_API_KEY });\n\nawait llm.generate({\n    model: mistral('mistral-large-latest'),\n    prompt: 'Hello!',\n});\n\n// DeepSeek\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nconst deepseek = createDeepSeek({ apiKey: process.env.DEEPSEEK_API_KEY });\n\nawait llm.generate({\n    model: deepseek('deepseek-chat'),\n    prompt: 'Hello!',\n});\n\n// Any other @ai-sdk/* provider works the same way\n```\n\n## Built-in Providers\n\nFor OpenAI, Anthropic, and Google, just use string IDs:\n\n```bash\n# Set API keys\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nGOOGLE_API_KEY=AIza...\n```\n\n```typescript\nawait llm.generate({ model: 'gpt-4o', prompt: '...' });\nawait llm.generate({ model: 'claude-sonnet', prompt: '...' });\nawait llm.generate({ model: 'gemini-flash', prompt: '...' });\n```\n\nNew models auto-detected by name pattern:\n```typescript\nawait llm.generate({ model: 'gpt-5', prompt: '...' });           // → openai\nawait llm.generate({ model: 'claude-opus-4.5', prompt: '...' }); // → anthropic\nawait llm.generate({ model: 'gemini-3-flash', prompt: '...' });  // → google\n```\n\n## API\n\n### generate(params)\n\n```typescript\nconst response = await llm.generate({\n    model: 'gpt-4o',             // string ID or LanguageModel\n    context: 'You are helpful.', // system prompt\n    prompt: 'Hello',             // required\n    messages: [],                // conversation history\n    images: [],                  // for multimodal\n    maxTokens: 1000,\n    temperature: 0.7,\n});\n// → { content, usage, finishReason }\n```\n\n### generateObject(params)\n\n```typescript\nconst person = await llm.generateObject({\n    model: 'gpt-4o',\n    prompt: 'Extract: John is 30',\n    outputSchema: PersonSchema,\n});\n// → parsed object\n```\n\n### stream(params)\n\n```typescript\nfor await (const chunk of llm.stream({ prompt: 'Tell a story' })) {\n    if (chunk.type === 'text') process.stdout.write(chunk.content);\n}\n```\n\n## Registered Models\n\n| ID | Provider | Actual Model |\n|----|----------|--------------|\n| `gpt-4o` | openai | gpt-4o |\n| `gpt-4o-mini` | openai | gpt-4o-mini |\n| `gpt-4.1` | openai | gpt-4.1 |\n| `gpt-4.1-mini` | openai | gpt-4.1-mini |\n| `gpt-4.1-nano` | openai | gpt-4.1-nano |\n| `o3` | openai | o3 |\n| `o4-mini` | openai | o4-mini |\n| `claude-sonnet` | anthropic | claude-sonnet-4-20250514 |\n| `claude-sonnet-4.5` | anthropic | claude-sonnet-4-5-20250929 |\n| `claude-opus` | anthropic | claude-opus-4-20250514 |\n| `claude-opus-4.5` | anthropic | claude-opus-4-5-20251124 |\n| `claude-haiku` | anthropic | claude-haiku-4-5-20251215 |\n| `gemini-flash` | google | gemini-2.5-flash |\n| `gemini-flash-lite` | google | gemini-2.5-flash-lite |\n| `gemini-pro` | google | gemini-2.5-pro |\n| `gemini-2.0-flash` | google | gemini-2.0-flash |\n\n## Usage Tracking\n\n```typescript\nconst stats = llm.getUsage();\nconsole.log(stats.tokens);   // { input, output, total }\nconsole.log(stats.cost);     // estimated USD (registered models only)\nconsole.log(stats.requests);\n\nllm.resetUsage();\n```\n\n## DI Pattern\n\n```typescript\nexport class MyAgent {\n    @dep() private llm!: LlmService;\n\n    async run() {\n        return await this.llm.generate({ prompt: 'Hello' });\n    }\n}\n```\n","readmeFilename":"README.md"}