{"id":28316767,"url":"https://github.com/patelvivekdev/jina-ai-provider","last_synced_at":"2026-03-05T21:05:10.684Z","repository":{"id":295209440,"uuid":"989480517","full_name":"patelvivekdev/jina-ai-provider","owner":"patelvivekdev","description":"AI SDK - Jina AI Provider","archived":false,"fork":false,"pushed_at":"2025-05-24T20:40:29.000Z","size":127,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-01T12:42:47.341Z","etag":null,"topics":["ai-sdk","embeddings","embeddings-model","jinaai","vercel-ai-sdk"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/jina-ai-provider","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patelvivekdev.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-24T07:19:45.000Z","updated_at":"2025-05-24T20:40:32.000Z","dependencies_parsed_at":"2025-05-24T08:30:17.767Z","dependency_job_id":"273e7c35-a836-43b7-b92d-bab367f81eaf","html_url":"https://github.com/patelvivekdev/jina-ai-provider","commit_stats":null,"previous_names":["patelvivekdev/jina-ai-provider"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/patelvivekdev/jina-ai-provider","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patelvivekdev%2Fjina-ai-provider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patelvivekdev%2Fjina-ai-provider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patelvivekdev%2Fjina-ai-provider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patelvivekdev%2Fjina-ai-provider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patelvivekdev","download_url":"https://codeload.github.com/patelvivekdev/jina-ai-provider/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patelvivekdev%2Fjina-ai-provider/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261643337,"owners_count":23188854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-sdk","embeddings","embeddings-model","jinaai","vercel-ai-sdk"],"created_at":"2025-05-25T03:08:09.469Z","updated_at":"2026-03-05T21:05:10.677Z","avatar_url":"https://github.com/patelvivekdev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI SDK - Jina AI Provider\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://www.npmjs.com/package/jina-ai-provider\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/jina-ai-provider\"/\u003e\u003ca\u003e\n\u003ca href=\"https://www.npmjs.com/package/jina-ai-provider\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/jina-ai-provider\"/\u003e\u003ca\u003e\n\u003ca href=\"https://github.com/patelvivekdev/jina-ai-provider/actions/workflows/CI.yml\"\u003e\u003cimg src=\"https://github.com/patelvivekdev/jina-ai-provider/actions/workflows/CI.yml/badge.svg\"/\u003e\u003ca\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n## Introduction\n\nThe Jina AI Provider is a provider for the AI SDK. It provides a simple interface to the Jina AI API for both text and multimodal embeddings.\n\n## Installation\n\n```bash\nnpm install jina-ai-provider\n\n# or\n\nyarn add jina-ai-provider\n\n# or\n\npnpm add jina-ai-provider\n\n# or\n\nbun add jina-ai-provider\n```\n\n## Configuration\n\nThe Jina AI Provider requires an API key to be configured. You can obtain an API key by signing up at [Jina](https://jina.ai).\n\nAdd the following to your `.env` file:\n\n```bash\nJINA_API_KEY=your-api-key\n```\n\n## Provider Instance\n\nYou can use the default provider instance or create your own configured instance.\n\n```ts\nimport { jina } from 'jina-ai-provider';\n// or\nimport { createJina } from 'jina-ai-provider';\n\nconst customJina = createJina({\n  // provider-level settings (not part of providerOptions)\n  apiKey: process.env.JINA_API_KEY,\n  // baseURL: 'https://api.jina.ai/v1',\n  // headers: { 'x-my-header': 'value' },\n  // fetch: yourCustomFetch,\n});\n```\n\nYou can use the following optional settings to customize the Jina provider instance:\n\n- **baseURL** string\n  - The base URL of the Jina API. Defaults to `https://api.jina.ai/v1`.\n- **apiKey** string\n  - API key sent via the `Authorization` header. Defaults to the `JINA_API_KEY` environment variable.\n- **headers** Record\u003cstring, string\u003e\n  - Custom headers to include with every request.\n- **fetch** (input: RequestInfo, init?: RequestInit) =\u003e Promise\u003cResponse\u003e\n  - Custom fetch implementation or middleware (for interception, testing, etc.).\n\n## Usage\n\n### Text Embeddings\n\n```typescript\nimport { jina } from 'jina-ai-provider';\nimport { embedMany } from 'ai';\n\nconst textEmbeddingModel = jina.textEmbeddingModel('jina-embeddings-v3');\n\nexport const generateEmbeddings = async (\n  value: string,\n): Promise\u003cArray\u003c{ embedding: number[]; content: string }\u003e\u003e =\u003e {\n  const chunks = value.split('\\n');\n\n  const { embeddings } = await embedMany({\n    model: textEmbeddingModel,\n    values: chunks,\n    providerOptions: {\n      // Jina embedding options for this request\n      jina: {\n        outputDimension: 3,\n        inputType: 'retrieval.passage',\n        embeddingType: 'float',\n        normalized: true,\n        truncate: true,\n        lateChunking: true,\n      },\n    },\n  });\n\n  return embeddings.map((embedding, index) =\u003e ({\n    content: chunks[index]!,\n    embedding,\n  }));\n};\n```\n\n### Multimodal Embeddings (Text + Images)\n\n```typescript\nimport { jina, type MultimodalEmbeddingInput } from 'jina-ai-provider';\nimport { embedMany } from 'ai';\n\nconst multimodalModel = jina.multiModalEmbeddingModel('jina-clip-v2');\n\nexport const generateMultimodalEmbeddings = async () =\u003e {\n  const values: MultimodalEmbeddingInput[] = [\n    { text: 'A beautiful sunset over the beach' },\n    { image: 'https://i.ibb.co/r5w8hG8/beach2.jpg' },\n  ];\n\n  const { embeddings } = await embedMany\u003cMultimodalEmbeddingInput\u003e({\n    model: multimodalModel,\n    values,\n    providerOptions: {\n      jina: {\n        outputDimension: 6,\n      },\n    },\n  });\n\n  return embeddings.map((embedding, index) =\u003e ({\n    content: values[index]!,\n    embedding,\n  }));\n};\n```\n\n\u003e [!TIP]\n\u003e Use `MultimodalEmbeddingInput` type to ensure type safety when using multimodal embeddings.\n\n### Provider options\n\nPass Jina embedding options via `providerOptions.jina`. See supported fields below.\n\n```typescript\nimport { jina } from 'jina-ai-provider';\nimport { embedMany } from 'ai';\n\nconst model = jina.textEmbeddingModel('jina-embeddings-v3');\n\nconst { embeddings } = await embedMany({\n  model,\n  values: ['one', 'two'],\n  providerOptions: {\n    jina: {\n      inputType: 'retrieval.query',\n      outputDimension: 1024,\n      embeddingType: 'float',\n      normalized: true,\n      truncate: false,\n      lateChunking: false,\n    },\n  },\n});\n```\n\nSupported provider options via `providerOptions.jina`:\n\n- **inputType** `'text-matching' | 'retrieval.query' | 'retrieval.passage' | 'separation' | 'classification'`\n  - Intended downstream application to help the model produce better embeddings. Defaults to `'retrieval.passage'`.\n  - `'retrieval.query'`: input is a search query.\n  - `'retrieval.passage'`: input is a document/passage.\n  - `'text-matching'`: for semantic textual similarity tasks.\n  - `'classification'`: for classification tasks.\n  - `'separation'`: for clustering tasks.\n- **outputDimension** number\n  - Number of dimensions for the output embeddings. See model docs for ranges.\n  - `jina-embeddings-v3`: min 32, max 1024.\n  - `jina-clip-v2`: min 64, max 1024.\n  - `jina-clip-v1`: fixed 768.\n- **embeddingType** `'float' | 'binary' | 'ubinary' | 'base64'`\n  - Data type for the returned embeddings. Defaults to `'float'`.\n- **normalized** boolean\n  - Whether to L2-normalize embeddings. Defaults to `true`.\n- **truncate** boolean\n  - Whether to truncate inputs beyond the model context limit instead of erroring. Defaults to `false`.\n- **lateChunking** boolean\n  - Split long inputs into 1024-token chunks automatically. Defaults to `false`. Only for text embedding models.\n\n## Max Embeddings Per Call\n\nThe Jina AI Provider supports up to 2048 embeddings per call.\n\n## Jina embedding models:\n\n| Model              | Context Length (tokens) | Embedding Dimension | Modalities    |\n| ------------------ | ----------------------- | ------------------- | ------------- |\n| jina-embeddings-v3 | 8,192                   | 1024                | Text          |\n| jina-clip-v2       | 8,192                   | 1024                | Text + Images |\n| jina-clip-v1       | 8,192                   | 768                 | Text + Images |\n\n## Supported Input Formats\n\n### Text Embeddings\n\n- Array of strings:\n  - `const strings = [\"text1\", \"text2\"]`\n\n### Multimodal Embeddings\n\n- Text objects:\n  - `const text = [{ text: \"Your text here\" }]`\n- Image objects:\n  - `const image = [{ image: \"https://example.com/image.jpg\" }]`\n  - `const image = [{ image: \"base64-encoded-image\" }]`\n- Mixed arrays:\n  - `const mixed = [{ text: \"object text\" }, { image: \"image-url\" }, {image: \"base64-encoded-image\"}]`\n\n\u003e [!TIP]\n\u003e You can pass base64 encoded image to `image` property.\n\n## Authors\n\n- [patelvivekdev](https://patelvivek.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatelvivekdev%2Fjina-ai-provider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatelvivekdev%2Fjina-ai-provider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatelvivekdev%2Fjina-ai-provider/lists"}