{"_id":"@andy-toolforge/genai-tools","name":"@andy-toolforge/genai-tools","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.2":{"name":"@andy-toolforge/genai-tools","version":"0.1.2","description":"Google GenAI SDK tools: search grounding, structured extraction","main":"lib/index.js","engines":{"node":">=18"},"dependencies":{"@google/genai":"^2.10.0","@andy-toolforge/core":"^1.0.0"},"scripts":{"test":"node --test lib/**/*.test.js"},"_id":"@andy-toolforge/genai-tools@0.1.2","gitHead":"79d320254ce48711a2bf3fb7c57a1bf7ddc04cbe","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-cuENWZ/yBiqwYHlzvrwyNiLFFhODWr/nSMncpZ/+sFOY5L+BBbzHpRP60IFYTR1w/8yNal2Ect+NzZ5R2eerXA==","shasum":"a1a36d35d9cc90c7dfa56bd8a814bec70dc66d33","tarball":"https://registry.npmjs.org/@andy-toolforge/genai-tools/-/genai-tools-0.1.2.tgz","fileCount":12,"unpackedSize":28461,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEBFSz3vblvFmVo0VwSONxAsgK1LnGerGDTAHRy9ZvREAiBWNX2zlei38fiQqtt6vCoogDKitb56ne0k7JOaL/UHlw=="}]},"_npmUser":{"name":"andy_pham","email":"phamlehoaian@gmail.com"},"directories":{},"maintainers":[{"name":"andy_pham","email":"phamlehoaian@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/genai-tools_0.1.2_1784247606361_0.09713398119398398"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T00:20:06.244Z","0.1.2":"2026-07-17T00:20:06.566Z","modified":"2026-07-17T00:20:06.792Z"},"maintainers":[{"name":"andy_pham","email":"phamlehoaian@gmail.com"}],"description":"Google GenAI SDK tools: search grounding, structured extraction","readme":"# @andy-toolforge/genai-tools\n\n> Google GenAI SDK tools: search grounding and structured data extraction.\n\n## Features\n\n- **Search-grounding queries** — answer questions with Google Search citations via Gemini\n- **Structured extraction** — extract JSON data from unstructured text using `responseSchema`\n- **GenAIClient** — lightweight wrapper around `@google/genai` SDK\n- **MCP tools** — `search_grounding` and `extract_structured` for agent integration\n- **Model selection** — configurable per-call (default: `gemini-3.1-flash-lite`)\n\n## Installation\n\n```bash\nnpm install @andy-toolforge/genai-tools\n```\n\nRequires `GEMINI_API_KEY` or `GOOGLE_API_KEY` environment variable.\n\n## Exports\n\n| Export | File | Purpose |\n|--------|------|---------|\n| `GenAIClient` | `lib/genai-client.js` | Gemini API client wrapper |\n| `GenAIAdapter` | `lib/genai-adapter.js` | ProviderAdapter — dùng `@google/genai` SDK trong LLMClient adapter chain |\n| `searchGrounding` | `lib/tools/search-grounding.js` | Google Search–grounded Q&A |\n| `extractStructured` | `lib/tools/extract-structured.js` | Structured JSON extraction via responseSchema |\n\n## Quick Start\n\n### Search Grounding\n\n```javascript\nconst { GenAIClient, searchGrounding } = require('@andy-toolforge/genai-tools');\n\nconst client = new GenAIClient(process.env.GEMINI_API_KEY);\nconst result = await searchGrounding(client, {\n    query: 'Latest developments in AI 2026',\n    model: 'gemini-2.5-flash',\n});\n\nconsole.log(result.answer);\n// \"Google DeepMind announced Gemini 3.1...\"\n\nconsole.log(result.citations);\n// [{ title: 'Google AI Blog', uri: '...', snippet: '...' }, ...]\n```\n\n### Structured Extraction\n\n```javascript\nconst { extractStructured } = require('@andy-toolforge/genai-tools');\n\nconst result = await extractStructured(client, {\n    content: 'Invoice #12345 dated Jan 15, 2026 for $299.99 from Acme Corp',\n    schema: {\n        type: 'object',\n        properties: {\n            invoiceNumber: { type: 'string' },\n            date: { type: 'string' },\n            amount: { type: 'number' },\n            vendor: { type: 'string' },\n        },\n    },\n});\n\nconsole.log(result.data);\n// { invoiceNumber: '12345', date: '2026-01-15', amount: 299.99, vendor: 'Acme Corp' }\n```\n\n## API Reference\n\n### GenAIAdapter\n\nProviderAdapter implementation wrapping `@google/genai` SDK. Dùng trong LLMClient adapter chain để gọi Gemini models qua GenAI SDK (không qua REST fetch).\n\n**Constructor:** `new GenAIAdapter(apiKey?)`\n\n| Parameter | Description |\n|-----------|-------------|\n| `apiKey` | Gemini API key. Falls back to `GEMINI_API_KEY` or `GOOGLE_API_KEY` env vars |\n\n**Ví dụ — dùng trong adapter chain:**\n\n```javascript\nconst { LLMClient, OpenAIAdapter } = require('@andy-toolforge/core');\nconst { GenAIAdapter } = require('@andy-toolforge/genai-tools');\n\nconst llm = new LLMClient({\n    adapters: [\n        new GenAIAdapter(process.env.GEMINI_API_KEY),\n        new OpenAIAdapter('groq', process.env.GROQ_API_KEY),\n    ],\n});\n```\n\n**So sánh OpenAIAdapter vs GenAIAdapter (Gemini):**\n\n| | OpenAIAdapter | GenAIAdapter |\n|--|--------------|--------------|\n| Backend | OpenAI-compatible REST API | `@google/genai` SDK |\n| Tính năng | Tương thích Groq/OpenAI | Hỗ trợ Gemini-exclusive features |\n| Khi nào dùng | Gemini cơ bản + Groq/OpenAI fallback | Gemini-optimized, multi-modal |\n\n\n### GenAIClient\n\n```javascript\nnew GenAIClient(apiKey?)\n```\n\n| Parameter | Description |\n|-----------|-------------|\n| `apiKey` | Gemini API key. Falls back to `GEMINI_API_KEY` or `GOOGLE_API_KEY` env vars |\n\n#### Static Methods\n\n| Method | Description |\n|--------|-------------|\n| `resolveApiKey()` | Returns `GEMINI_API_KEY` or `GOOGLE_API_KEY` from env, or empty string |\n\n#### Instance Methods\n\n| Method | Description |\n|--------|-------------|\n| `generateContent({ model, prompt, config? })` | Generate content with optional tools/responseSchema config. Returns `{ text, raw }` |\n\n### searchGrounding(client, opts)\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `query` | `string` | **required** | Question to answer |\n| `model` | `string` | `gemini-3.1-flash-lite` | Model name |\n\nReturns: `Promise<{ answer: string, citations: Array<{title, uri, snippet}>, model: string }>`\n\n### extractStructured(client, opts)\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `content` | `string` | **required** | Text to extract data from |\n| `schema` | `object` | **required** | JSON Schema for desired output shape |\n| `instruction` | `string` | — | Custom extraction instruction |\n| `model` | `string` | `gemini-3.1-flash-lite` | Model name |\n\nReturns: `Promise<{ data: object, model: string }>`\n\n## MCP Tools\n\nAuto-discovered by `@andy-toolforge/mcp`:\n\n| Tool | Description |\n|------|-------------|\n| `search_grounding` | Answer a query using Google Search–grounded Gemini; returns answer with cited sources |\n| `extract_structured` | Extract structured JSON data from text using Gemini's `responseSchema` |\n\n## Development\n\n```bash\nnpm test -w @andy-toolforge/genai-tools\n```\n","readmeFilename":"README.md","_rev":"1-a96906f91e7f832711af333962bfbc90"}