> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aihubmix.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Jina AI Integration

## Descrição

We have integrated the five core interfaces of Jina AI, helping you easily build powerful intelligent agents. These interfaces are primarily suitable for o seguinte scenarios:

* **Vector Embeddings (Embeddings)**：Applicable to multi-modal RAG question-answering scenarios, como smart customer service, smart recruitment, and knowledge base question-answering.
* **Reranking (Rerank)**：By optimizing the Embedding candidate results, sorting them based on topic relevance, significantly improving the quality of the answers from large language models.
* **Deep Search (DeepSearch)**：Perform deep search and reasoning until the optimal answer is found, particularly suitable for complex tasks como research projects and product solution development.
* **Web Search (Search)**：Passe uma consulta e obtenha o corpo de texto limpo da página de resultados do buscador (SERP), pronto para alimentar diretamente um LLM para perguntas e respostas conectadas à web e RAG.
* **Web Reader (Reader)**：Passe qualquer URL e obtenha o corpo Markdown limpo dessa página após a conversão, ideal para extrair conteúdo web e alimentar um LLM.

<Tip>
  We've enhanced the Jina AI API to support future extensions, so the usage may differ slightly a partir do official native implementation.
</Tip>

## Início Rápido

Substitua o `API_KEY` with [AIHUBMIX\_API\_KEY](https://aihubmix.com/token) and the model endpoint link, and the other parameters and usage are fully consistent with [Jina AI official](https://jina.ai/).

**Endpoint Replacement:**

* **Vector Embeddings (Embeddings)**：`https://jina.ai/embeddings` -> `https://aihubmix.com/v1/embeddings`
* **Reranking (Rerank)**：`https://api.jina.ai/v1/rerank` -> `https://aihubmix.com/v1/rerank`
* **Deep Search (DeepSearch)**：`https://deepsearch.jina.ai/v1/chat/completions` -> `https://aihubmix.com/v1/chat/completions`
* **Web Search (Search)**：`https://s.jina.ai/?q=` -> `https://aihubmix.com/v1/jina/search?q=`
* **Web Reader (Reader)**：`https://r.jina.ai/<url>` -> `https://aihubmix.com/v1/jina/reader/<url>`

  <Note>
    Se o endereço principal atual da API estiver indisponível, substitua o domínio nesta configuração pelo endereço de backup `https://api.inferera.com`; mantenha o caminho inalterado.
  </Note>

## Embeddings

Jina AI's Embedding suporta both plain text and multi-modal images, and performs excellently in handling multi-language tasks.

### Parâmetros da Requisição

<ParamField body="model" type="string" required>
  Model name, available model list:

  * `jina-clip-v2`：Multi-modal, multilingual, 1024-dimensional, 8K context window, 865M parameters
  * `jina-embeddings-v3`：Text model, multilingual, 1024-dimensional, 8K context window, 570M parameters
  * `jina-colbert-v2`：Multi-language ColBERT model, 8K token context, 560M parameters, used for embedding and reranking
  * `jina-embeddings-v2-base-code`：Model optimized for code and document search, 768-dimensional, 8K context window, 137M parameters
</ParamField>

<ParamField body="input" type="array" required>
  Input text or image, different models support different input formats. For text, provide an array of strings; for multi-modal models, provide an array of objects containing text or image fields.
</ParamField>

<ParamField body="embedding_format" type="string" default="float">
  Data type returned, optional values:

  * `float`：Default, return a float array. The most common and easy-to-use format, return a list of floats
  * `binary_int8`：Return as int8 packed binary format. More efficient storage, search, and transmission
  * `binary_uint8`：Return as uint8 packed binary format. More efficient storage, search, and transmission
  * `base64`：Return as base64 encoded string. More efficient transmission
</ParamField>

<ParamField body="dimensions" default="1024" type="integer">
  The number of dimensions used in computation. Supported values:

  * 1024
  * 768
</ParamField>

### 1. Multimodal Usage

<CodeGroup>
  ```shell Curl theme={null}
  curl https://aihubmix.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-***" \
    -d @- <<EOFEOF
    {
      "model": "jina-clip-v2",
      "input": [
          {
              "text": "A beautiful sunset over the beach"
          },
          {
              "text": "Un beau coucher de soleil sur la plage"
          },
          {
              "text": "海滩上美丽的日落"
          },
          {
              "text": "浜辺に沈む美しい夕日"
          },
          {
              "image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
          },
          {
              "image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
          },
          {
              "image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
          }
      ]
    }
  EOFEOF
  ```

  ```py Python theme={null}
  import requests
  import json

  url = 'https://aihubmix.com/v1/embeddings'
  headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' # Replace it by your AiHubMix Key
  }

  data = {
      "model": "jina-clip-v2",
      "input": [
          {
              "text": "A beautiful sunset over the beach"
          },
          {
              "text": "Un beau coucher de soleil sur la plage"
          },
          {
              "text": "海滩上美丽的日落"
          },
          {
              "text": "浜辺に沈む美しい夕日"
          },
          {
              "image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
          },
          {
              "image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
          },
          {
              "image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
          }
      ]
  }

  response = requests.post(url, headers=headers, data=json.dumps(data))

  print(response.json())
  ```

  ```ts TypeScript theme={null}
  import fetch from 'node-fetch';

  const url = 'https://aihubmix.com/v1/embeddings';
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-***' // Replace it by your AiHubMix Key
  };
  const data = {
    "model": "jina-clip-v2",
    "input": [
      {
        "text": "A beautiful sunset over the beach"
      },
      {
        "text": "Un beau coucher de soleil sur la plage"
      },
      {
        "text": "海滩上美丽的日落"
      },
      {
        "text": "浜辺に沈む美しい夕日"
      },
      {
        "image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
      },
      {
        "image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
      },
      {
        "image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
      }
    ]
  };

  fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(data)
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(err => console.error(err));

  ```
</CodeGroup>

### 2. Pure Text Usage

Only provide an array of text strings, do not provide the `image` field.

<CodeGroup>
  ```shell Curl theme={null}
  curl https://aihubmix.com/v1/rerank \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-***" \
    -d @- <<EOFEOF
    {
      "model": "jina-embeddings-v3",
      "input": [
          "A beautiful sunset over the beach",
          "Un beau coucher de soleil sur la plage",
          "海滩上美丽的日落",
          "浜辺に沈む美しい夕日"
      ]
    }
  EOFEOF
  ```

  ```py Python theme={null}
  import requests

  url = 'https://aihubmix.com/v1/embeddings'
  headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' # Replace it by your AiHubMix Key
  }
  data = {
      'model': 'jina-embeddings-v3',
      'input': [
          'A beautiful sunset over the beach',
          'Un beau coucher de soleil sur la plage',
          '海滩上美丽的日落',
          '浜辺に沈む美しい夕日'
      ]
  }

  response = requests.post(url, headers=headers, json=data)

  print(response.json())
  ```

  ```ts TypeScript theme={null}
  import * as https from 'https';

  const options = {
    hostname: 'aihubmix.com',
    path: '/v1/embeddings',   
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' // Replace it by your AiHubMix Key
    }
  };

  const data = JSON.stringify({
    "model": "jina-embeddings-v3",
    "input": [
      "A beautiful sunset over the beach",
      "Un beau coucher de soleil sur la plage",
      "海滩上美丽的日落",
      "浜辺に沈む美しい夕日"
    ]
  });

  const req = https.request(options, res => {
    let responseData = '';
    res.on('data', chunk => {
      responseData += chunk;
    });
    res.on('end', () => {
      console.log(responseData);
    });
  });

  req.write(data);
  req.end();

  ```
</CodeGroup>

## Rerank

Reranker aims to improve search relevance and RAG accuracy. It deep analyzes the initial search results, considers the subtle interactions between the query and document content, and reorders the search results to place the most relevant results at the top.

### Parâmetros da Requisição

<ParamField body="model" type="string" required>
  Model name, available model list:

  * `jina-reranker-m0`：Multimodal multilingual document reranker, 10K context, 2.4B parameters, for visual document sorting
</ParamField>

<ParamField body="query" type="string" required>
  Search query text, used to compare with candidate documents
</ParamField>

<ParamField body="top_n" type="integer">
  The number of most relevant documents to return. Default returns all documents
</ParamField>

<ParamField body="documents" type="array" required>
  Array of candidate documents, will be reordered based on relevance to the query
</ParamField>

<ParamField body="max_chunk_per_doc" default="4096" type="integer">
  Maximum chunk length per document, applicable **only** to Cohere (not supported by Jina). Defaults to 4096.\
  Long documents will be automatically truncated to the specified number of tokens.
</ParamField>

### 1. Multimodal Usage

<CodeGroup>
  ```shell Curl theme={null}
  curl https://aihubmix.com/v1/rerank \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-***" \
    -d @- <<EOFEOF
    {
      "model": "jina-reranker-m0",
      "query": "small language model data extraction",
      "documents": [
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png"
          },
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png"
          },
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png"
          },
          {
              "text": "We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements."
          },
          {
              "image": "https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp"
          },
          {
              "text": "Data extraction? Why not just use regular expressions—wouldn't regex solve it all?"
          },
          {
              "text": "During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold."
          },
          {
              "text": "Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar."
          },
          {
              "image": "iVBORw0KGgoAAAANSUhEUgAAAMwAAADACAMAAAB/Pny7AAAA7VBMVEX///8AAABONC780K49Wv5gfYu8vLwiIiIAvNRHLypceJ5hfoc4Vf//1bL8/PxSbsCCgoLk5OQpKSlOQDXctpgZEA9AXv8SG0sGCRorHRocKnY4U+sKDQ7rwqISGBssOkE+Pj5fX19MY29ZdIF1YFGHcF68m4EjLTKSkpInOqIcJSndzbU9UFlcv87DyrvrzrF1wcpOTk6jo6OixsE7MCg4JSHLy8skNZLNqo4EBQ9kU0VZSj0uJh93d3cyMjKihnBvamZca3KoqbI8R5YaLI41R3omM1lNZ7EAAEEbIy46TGcwPk8jEQyIw8eZjobFTeMIAAAFHUlEQVR4nO3da0PaOhwG8CGOHqYwKqBjFKQ6sJt63Biy6Siw+/18/48zSP7FhqU5XNr04vP4igRCfmsX2jSFBw+2TTm0bN2V7ePkQooTt2SWvhGOxejHLZml3w4H0wYm5ACTWExIA0A8GNN+5c/YYn2pF7dNh7dX0YvpyP5hG8WdLdPgDdnAAANM6jD1dGMa10K2tXiYTp9HzxmBh9l6U8gxlI4JDDDAABNRyibLsFNnCRtzzZutc8x4yN8tqhG6cGDNQ4qwLV6KtGnYe1kHhagwRkif9StheAxggAEGmJRidmiyhj5vDjosoc+qa8JQ6sIWCn0CSiumCAwwwNxfzA5N+tQzgaE0gAEGGGBCU5hDFmfUYNFpCR/jjFkGWjdJVJgKb1DvJgEGGGCAiQXjzeEXpaVi6GJuUVrppRgrRnZ4cJ2TpeFhpLU5oaFYMEU5xgIGGGDuDybXEMMLB5Meyy11VKgcUSVlwkstek7oszPrYKS5bZVYurLKwduSPzVpCwnCvKuV8vMEYfJ3AQaYLGBc3uCvjTHVBGEKlXmcqWoBoxxT7bJMWry/va4kk5qIoeJRRBi6japg5IJXAMkx3RbLoqstWfJieGGtGhGGopwEDMDkS/mNUmolEbNpgAEmuxi+OoTmAKxB1Z8Jde2KR97vK1ktYSy6RUjTchNxaeWoV/OHht3z35fzvPxXannNKi/FSsIYfb5UM/Tlp3KMuOh1UBOO52lgPr/8h0WOeckrX0sxelc1/YWR9BcYYO43ZkeBGaUM482biHNB72hypZUujBcR86wlDMapx8h6CgwwwGQTQ3M12cCIVytSjskBAwww/4ORXqBMKWZo80hNSszVb9mchbIyaox3B+14bUz+6pxFPtd0LquMGkORf+2EGrN+gAEGmIRijANf2qnGlIcFf1wrVIx3gfbZSAtmKfRlbeFhhL1XN6YNDDDRY7L0f8ZZDM3B07MB/ZZmae2MXszQYStr/lNNnMstrZ4stKzRqPAMtWI8Ez8ukF/SCNihxLU+YjR9vZESI7/YFIAZAAMMMMuLGlRRYsZxYkyXzdxMxeUmyvSmdnCmcWJo6sZ0qyvHNVVJwJfRl23FrrMUOwH9Vcacro6JdU9aJcAkNaa9OsZOOqbssrvtO3T1oz4a+DKi5YJGhz3JTfoAQFM3Q9rbbsXDe7qzaUpPSjrGC52ydcXPfLqxIQk/AbJOPIx4OAZM/AEmqcniACAfmlOKkQeYGANMUgNMjFFORzjts8C0HeVLY8HYwkVnMcbJQ0VOVK/U+ysnC4xqT7pQYS5UrwQGGGASjaHfJbVz7XlokaPV9sdSj2ZLT/a3MMPo/N1Ts+KyS6fvT1iOeV/OToScqjCn4nPPuOWYP3rPGncrmn6yhdZoUn8vOOZY2X0l7ZhjaM885a1ruj7jrTeLFqP5x3SAASaS8CFzhrmZJToMa32GiXSENvk6xg8fP72Z5dNjns83rC9fvj7eMF+/sAZuPtNj3vrHD/zdotpABb4DfGsesuzuz7P7/Akrfdrkj9fObvMpa+DJc2qQt978xt8t4ltOjpq7vhzeYTbMAnMolB6x0qjvnwEGGGCAAQYYYIABJjmY74+E/ODnMz8fbZyfrAHrh1j6XQvmxemeP4uTs70Nszg5E0tfaMIIJ4phn2l6pcAAAwwwwAADDDBRYvYWfz6Mr3Bv6U9V4MP46jVhMnXUfCTMkN9NnG82b76/vzRx7rWLkzNggAEGmCxg/gAcTwKRD+vGjgAAAABJRU5ErkJggg=="
          }
      ]
    }
  EOFEOF
  ```

  ```py Python theme={null}
  import requests

  url = 'https://aihubmix.com/v1/rerank'
  headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' # Replace it by your AiHubMix Key 
  }
  data = {
      "model": "jina-reranker-m0",
      "query": "small language model data extraction",
      "documents": [
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png"
          },
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png"
          },
          {
              "image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png"
          },
          {
              "text": "We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements."
          },
          {
              "image": "https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp"
          },
          {
              "text": "Data extraction? Why not just use regular expressions—wouldn't regex solve it all?"
          },
          {
              "text": "During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold."
          },
          {
              "text": "Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar."
          },
          {
              "image": "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"
          }
      ]
  }

  response = requests.post(url, headers=headers, json=data)

  print(response.json())

  ```

  ```ts TypeScript theme={null}
  import fetch from 'node-fetch';

  const url = 'https://aihubmix.com/v1/rerank';

  const options = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' // Replace it by your AiHubMix Key
    },
    body: JSON.stringify({
      model: 'jina-reranker-m0',
      query: 'small language model data extraction',
      documents: [
        {
          image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png'
        },
        {
          image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png'
        },
        {
          image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png'
        },
        {
          text: 'We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements.'
        },
        {
          image: 'https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp'
        },
        {
          text: 'Data extraction? Why not just use regular expressions—wouldn\'t regex solve it all?'
        },
        {
          text: 'During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold.'
        },
        {
          text: 'Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar.'
        },
        {
          image: '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'
        }
      ]
    })
  };

  fetch(url, options)
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
  ```
</CodeGroup>

### Response Description

```json theme={null}
{
  "model": "jina-reranker-m0",
  "results": [
    {
      "index": 1,
      "relevance_score": 0.8814517277012487
    },
    {
      "index": 3,
      "relevance_score": 0.7756727858283531
    },
    {
      "index": 7,
      "relevance_score": 0.6128658982982312
    }
  ],
  "usage": {
    "total_tokens": 2894
  }
}
```

**Response successful:**

* `model`: The name of the model used
* `results`: An array of reranking results sorted by relevance score in descending order, each element contains:
  * `index`: The index position no original document array
  * `relevance_score`: A relevance score between 0-1, higher scores indicate greater relevance to the query
* `usage`: Usage statistics
  * `total_tokens`: Total number of tokens processed in this request

### 2. Text Usage

Text reranking suporta both multilingual and regular tasks, similar to embedding usage, by passing in an array.

<CodeGroup>
  ```shell Curl theme={null}
  curl https://aihubmix.com/v1/rerank \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-***" \
    -d @- <<EOFEOF
    {
      "model": "jina-reranker-v2-base-multilingual",
      "query": "Organic skincare products for sensitive skin",
      "top_n": 3,
      "documents": [
          "Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
          "New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
          "Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
          "Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
          "Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
          "Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
          "针对敏感肌专门设计的天然有机护肤产品：体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计，温和滋润，保护您的肌肤不受刺激。让您的肌肤告别不适，迎来健康光彩。",
          "新的化妆趋势注重鲜艳的颜色和创新的技巧：进入化妆艺术的新纪元，本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光，每一款妆容都能让您脱颖而出，展现独特魅力。",
          "敏感肌のために特別に設計された天然有機スキンケア製品: アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
          "新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています: 今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
      ]
    }
  EOFEOF
  ```

  ```py Python theme={null}
  import requests

  url = 'https://aihubmix.com/v1/rerank'
  headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' # Replace it by your AiHubMix Key
  }
  data = {
      "model": "jina-reranker-v2-base-multilingual",
      "query": "Organic skincare products for sensitive skin",
      "top_n": 3,
      "documents": [
          "Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
          "New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
          "Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
          "Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
          "Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
          "Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
          "针对敏感肌专门设计的天然有机护肤产品：体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计，温和滋润，保护您的肌肤不受刺激。让您的肌肤告别不适，迎来健康光彩。",
          "新的化妆趋势注重鲜艳的颜色和创新的技巧：进入化妆艺术的新纪元，本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光，每一款妆容都能让您脱颖而出，展现独特魅力。",
          "敏感肌のために特別に設計された天然有機スキンケア製品: アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
          "新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています: 今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
      ]
  }

  response = requests.post(url, headers=headers, json=data)

  print(response.json())
  ```

  ```ts TypeScript theme={null}
  const https = require('https');

  const requestData = {
    model: "jina-reranker-v2-base-multilingual",
    query: "Organic skincare products for sensitive skin",
    top_n: 3,
    documents: [
      "Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
      "New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
      "Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
      "Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
      "Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
      "Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
      "针对敏感肌专门设计的天然有机护肤产品：体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计，温和滋润，保护您的肌肤不受刺激。让您的肌肤告别不适，迎来健康光彩。",
      "新的化妆趋势注重鲜艳的颜色和创新的技巧：进入化妆艺术的新纪元，本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光，每一款妆容都能让您脱颖而出，展现独特魅力。",
      "敏感肌のために特別に設計された天然有機スキンケア製品：アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
      "新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています：今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
    ]
  };

  const options = {
    hostname: 'aihubmix.com',
    port: 443,
    path: '/v1/rerank',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' // Replace it by your AiHubMix Key
    }
  };

  const req = https.request(options, res => {
    let responseData = '';
    res.on('data', chunk => {
      responseData += chunk;
    });
    res.on('end', () => {
      console.log(responseData);
    });
  });

  req.write(JSON.stringify(requestData));
  req.end();
  ```
</CodeGroup>

## DeepSearch

DeepSearch combines search, reading, and reasoning capabilities to pursue the best possible answer. It's fully compatible with OpenAI's Chat API format—just replace api.openai.com with aihubmix.com to get started.\
The stream will return the thinking process.

### Parâmetros da Requisição

<ParamField body="model" type="string" required>
  Model name, available models:

  * `jina-deepsearch-v1`：Default model, search, read and reason until the best answer is found
</ParamField>

<ParamField body="stream" type="boolean" default="true">
  Whether to enable streaming response. It is strongly recommended to keep this option enabled, DeepSearch requests may take a long time to complete, disabling streaming may result in a '524 Timeout' error
</ParamField>

<ParamField body="messages" type="array" required>
  The list of conversation messages between the user and the assistant. Suporta multiple types (modal) messages, como text (.txt, .pdf), images (.png, .webp, .jpeg), etc. The maximum file size is 10MB
</ParamField>

### Multimodal Message Format

DeepSearch suporta multiple types of message formats, which can include pure text (message), files (file), and images (image). O seguinte are examples of different formats:

#### 1. Pure Text Message

```json theme={null}
{
  "role": "user",
  "content": "hi"
}
```

#### 2. Message with File Attachment

```json theme={null}
{
  "role": "user",
  "content": [
    {
      "type": "text",
      "text": "what's in this file?"
    },
    {
      "type": "file",
      "data": "data:application/pdf;base64,JVBERi0xLjQKJfbk...", // PDF 文件的 base64 编码
      "mimeType": "application/pdf"
    }
  ]
}
```

#### 3. Message with Image

```json theme={null}
{
  "role": "user",
  "content": [
    {
      "type": "text",
      "text": "what's in the image?"
    },
    {
      "type": "image",
      "image": "data:image/webp;base64,UklGRoDOAAB...", // the base64 encoding of images
      "mimeType": "image/webp"
    }
  ]
}
```

All files and images must be encoded in data URI format (data URI) in advance, with a maximum file size of 10MB.

### Example of Calling

Observe que **Jina AI's Python streaming call on the official website will not have a response**; consulte our example.

<CodeGroup>
  ```shell Curl theme={null}
  curl https://aihubmix.com/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-***" \
    -d @- <<EOFEOF
    {
      "model": "jina-deepsearch-v1",
      "messages": [
          {
              "role": "user",
              "content": "Hi!"
          },
          {
              "role": "assistant",
              "content": "Hi, how can I help you?"
          },
          {
              "role": "user",
              "content": "what's the latest blog post from jina ai?"
          }
      ],
      "stream": true
    }
  EOFEOF
  ```

  ```py Python theme={null}
  import requests
  import json

  url = 'https://aihubmix.com/v1/chat/completions'
  headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-***' # Replace it by your AiHubMix Key
  }

  data = {
      "model": "jina-deepsearch-v1",
      "messages": [
          {
              "role": "user",
              "content": "Hi!"
          },
          {
              "role": "assistant",
              "content": "Hi, how can I help you?"
          },
          {
              "role": "user",
              "content": "what's the latest blog post from jina ai?"
          }
      ],
      "stream": True
  }

  # Use stream=True in the request to handle streaming responses
  response = requests.post(url, headers=headers, json=data, stream=True)

  # Check if the request was successful
  if response.status_code == 200:
      # Iterate over the response content line by line
      for line in response.iter_lines():
          if line:
              # Decode line and print (assuming SSE format: "data: {...}")
              decoded_line = line.decode('utf-8')
              if decoded_line.startswith('data: '):
                  # Handle potential end signal like "data: [DONE]"
                  if decoded_line[len('data: '):].strip() == '[DONE]':
                      print("\nStream finished.")
                      break
                  try:
                      # Extract the JSON part
                      json_data = json.loads(decoded_line[len('data: '):])
                      # Process the JSON data
                      if 'choices' in json_data and len(json_data['choices']) > 0:
                          delta = json_data['choices'][0].get('delta', {})
                          content_to_print = delta.get('content') or delta.get('reasoning_content') # Check both fields

                          if content_to_print:
                              print(content_to_print, end='', flush=True)
                  except json.JSONDecodeError:
                      # Ignore lines that are not valid JSON after "data: "
                      # print(f"\nCould not decode JSON from line: {decoded_line}")
                      pass # Optionally log or handle non-JSON data lines if needed
              # Handle lines that don't start with "data: " if necessary
              # else:
              #    print(f"Received non-data line: {decoded_line}")

      print() # Add a newline at the end
  elif response.status_code == 401:
       print(f"Error: {response.status_code} - Unauthorized. Please check your API key.")
       try:
           print(response.json())
       except json.JSONDecodeError:
           print(response.text)
  else:
      print(f"Error: {response.status_code}")
      try:
          print(response.json()) # Print error details if available
      except json.JSONDecodeError:
          print(response.text) # Print raw text if not JSON
  ```

  ```ts TypeScript theme={null}
  const https = require('https');

  const data = JSON.stringify({
    model: "jina-deepsearch-v1",
    messages: [
      {
        role: "user",
        content: "Hi!"
      },
      {
        role: "assistant",
        content: "Hi, how can I help you?"
      },
      {
        role: "user",
        content: "what's the latest blog post from jina ai?"
      }
    ],
    stream: true
  });

  const options = {
    hostname: 'aihubmix.com',
    path: '/v1/chat/completions',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': data.length,
      'Authorization': 'Bearer sk-***' // Replace it by your AiHubMix Key
    }
  };

  const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`);

    res.on('data', d => {
      process.stdout.write(d);
    });
  });

  req.on('error', error => {
    console.error(error);
  });

  req.write(data);
  req.end();
  ```
</CodeGroup>

### Response Description

The response from DeepSearch is streamed by default, including both intermediate reasoning steps and the final answer.
The last block of the stream contains the final response, a list of visited URLs, and token usage details.
If streaming is disabled, only the final answer will be returned—intermediate "thinking" steps will be omitted.
**Note:** This JSON object differs a partir do format used by Jina AI.

```json theme={null}
{
  "id": "1745506101379",
  "object": "chat.completion.chunk",
  "created": 1745506101,
  "model": "jina-deepsearch-v1",
  "choices": [
    {
      "index": 0,
      "delta": {
        "role": "assistant",
        "reasoning_content": "<think>"
      }
    }
  ],
  "system_fingerprint": "fp_1745506101379"
}

// Streaming reason
{
  "id": "1745506101379",
  "object": "chat.completion.chunk",
  "created": 1745506101,
  "model": "jina-deepsearch-v1",
  "choices": [
    {
      "index": 0,
      "delta": {
        "reasoning_content": "thinking parts"
      }
    }
  ],
  "system_fingerprint": "fp_1745506101379"
}

// Reasoning finished
{
  "id": "1745506101379",
  "object": "chat.completion.chunk",
  "created": 1745506101,
  "model": "jina-deepsearch-v1",
  "choices": [
    {
      "index": 0,
      "delta": {
        "reasoning_content": "</think>\n\n"
      },
      "finish_reason": "thinking_end"
    }
  ],
  "system_fingerprint": "fp_1745506101379"
}

// The Final Response with URL
{
  "id": "1745506101379",
  "object": "chat.completion.chunk",
  "created": 1745506101,
  "model": "jina-deepsearch-v1",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Response content",
        "type": "text",
        "annotations": [
          {
            "type": "url_citation",
            "url_citation": {
              "url": "https://example.com",
              "title": "Page Title",
              "start_index": 0,
              "end_index": 0
            }
          }
        ]
      },
      "finish_reason": "stop"
    }
  ],
  "system_fingerprint": "fp_1745506101379",
  "usage": {
    "prompt_tokens": 673423,
    "completion_tokens": 109286,
    "total_tokens": 583555
  }
}

data: [DONE]
```

**Python Return Example:**

```py Python theme={null}
<think>I need to check the Jina AI blog for their most recent post, which requires up-to-date information. I need to find the latest blog post from Jina AI. I will use a search engine to find the Jina AI blog and then identify the most recent post. Let me search for latest blog post from Jina AI to gather more information. Okay, I've created some queries to find the latest Jina AI blog post. First, a general search for the Jina AI blog updated in the past week. Then, some focused queries on specific Jina AI products like DeepSearch and neural search, checking for updates in the last month. Also, I included queries about embedding models and API updates, again looking at the past month. And I added a query about Elasticsearch integration from the past year. Finally, I've added a query to find any criticisms or limitations of Jina AI, to get a balanced perspective. Let me search for Jina AI Elasticsearch integration, Jina AI criticism limitations, Jina AI deepsearch updates, Jina AI neural search, Jina AI embedding models to gather more information. To accurately answer the user's question about the latest blog post from Jina AI, I need to visit the provided URLs and extract the publication dates and titles of the blog posts. This will allow me to identify the most recent one. I'll start with the most relevant URLs based on the weights assigned during the search action. Let me read https://jina.ai/news/a-practical-guide-to-implementing-deepsearch-deepresearch, https://jina.ai/news/auto-gpt-unmasked-hype-hard-truths-production-pitfalls, https://jinaai.cn/news/a-practical-guide-to-implementing-deepsearch-deepresearch, https://businesswire.com/news/home/20250220781575/en/Elasticsearch-Open-Inference-API-now-Supports-Jina-AI-Embeddings-and-Rerank-Model, https://gurufocus.com/news/2709507/elastic-nv-estc-enhances-elasticsearch-with-jina-ai-integration to gather more information. Content of https://jina.ai/news/a-practical-guide-to-implementing-deepsearch-deepresearch is too long, let me cherry-pick the relevant parts. Content of https://jinaai.cn/news/a-practical-guide-to-implementing-deepsearch-deepresearch is too long, let me cherry-pick the relevant parts. Content of https://jina.ai/news/auto-gpt-unmasked-hype-hard-truths-production-pitfalls is too long, let me cherry-pick the relevant parts. I have found several blog posts and news articles related to Jina AI. I will summarize the most recent information available to answer the user's question. But wait, let me evaluate the answer first. The answer provides a summary of recent blog posts from Jina AI, covering different aspects of their activities. This constitutes a definitive response as it directly addresses the question with specific information. The answer discusses recent blog posts and news from Jina AI. Tech news has a max age of 7 days, and since the blog posts are only a few days old, the answer is still fresh. I am sorry, but the answer is too generic. While it mentions a few blog posts, it doesn't identify the absolute latest one. A perfect answer should pinpoint the most recent blog post with its exact title and, if possible, a direct link. The current answer provides a summary of several recent posts, which isn't precise enough for what I'm looking for. I messed up by summarizing multiple blog posts instead of pinpointing the single latest one. I needed to focus on finding the most recent date and title. I should prioritize identifying the latest date associated with a blog post and then provide its title and a direct link if available. Okay, I need to find the absolute latest blog post from Jina AI. The previous answer was too generic. I need to be laser-focused on identifying the most recent post. I'll revisit the Jina AI news page and look for specific dates and titles. I'll prioritize URLs that are likely to contain blog posts or news announcements directly from Jina AI. Let me read https://jina.ai/news, https://jina.ai/deepsearch, https://zilliz.com/blog/training-text-embeddings-with-jina-ai, https://github.com/jina-ai/node-DeepResearch, https://x.com/jinaai_?lang=en to gather more information. Content of https://zilliz.com/blog/training-text-embeddings-with-jina-ai is too long, let me cherry-pick the relevant parts. Content of https://jina.ai/deepsearch is too long, let me cherry-pick the relevant parts. I have reviewed my knowledge and can confidently answer the user's question about the latest blog post from Jina AI. I will provide the title and a direct link. But wait, let me evaluate the answer first. The answer provides a clear and direct response to the question, including the title, publication date, and a link to the latest blog post from Jina AI. There are no uncertainty markers or hedging. The blog post was published on April 16, 2025, which is 8 days ago from today (April 24, 2025). Since the blog post falls under 'Tech News,' the maximum age should be 7 days. Therefore, the answer is outdated. Okay, I jumped the gun and didn't double-check the date of the blog post against the current date. My bad for not ensuring it was within the acceptable timeframe! Next time, I'll make absolutely sure to verify the publication date and confirm it's fresh enough before confidently declaring it the latest blog post. Gotta keep those dates in check! I need to find the very latest blog post from Jina AI. The previous attempt failed because it wasn't recent enough. I need to revisit the Jina AI news page to check for any even more recent posts. I'll focus on extracting the title and URL of the most recent entry. Let me read https://jina.ai/news?tag=tech-blog, https://news.ycombinator.com/item?id=38020109, https://github.com/sthagen/jina-ai-jina, https://parsers.vc/news/250222-the-new-frontier-of-ai--elasticsearch-and, https://jina.ai/embeddings to gather more information. Content of https://jina.ai/embeddings is too long, let me cherry-pick the relevant parts. Content of https://news.ycombinator.com/item?id=38020109 is too long, let me cherry-pick the relevant parts. I have gathered information from various sources about Jina AI's blog posts. I will now synthesize this information to provide the most recent blog post title and a direct link, if available. But wait, let me evaluate the answer first. The answer makes a direct statement about the latest blog post from Jina AI, providing the title, publication date, and a link to the post. There are no hedges or qualifications, so it is definitive. Let me finalize the answer. Let Let me cross-reference the information from the web to verify the answer. </think>

The relentless pursuit of better search demands we confront a harsh reality: size matters, and not always in a good way. Jina AI's latest blog post, "On the Size Bias of Text Embeddings and Its Impact in Search," published on April 16, 2025, tackles this head-on. It's not just another piece of content; it's a critical examination of how the length of text inputs can skew similarity metrics, leading search systems to favor verbose, often irrelevant documents over concise, precise matches.

Why should you care? Because in the age of information overload, relevance is king. We're drowning in data, and search engines are our life rafts. But if those rafts are steered by algorithms that are easily fooled by sheer volume, we're all going down with the ship.

The post likely delves into the mechanics of text embeddings, those numerical representations of text that allow machines to understand and compare semantic meaning. The core issue, as Jina AI points out, is that these embeddings can be influenced by the length of the input text, a phenomenon they term "size bias." This means that a longer document, even if only marginally relevant, might appear more similar to a query than a shorter, more focused one.[^1]

To truly grasp the implications, consider the following:

*   **What is Size Bias?** Size bias refers to how the length of text inputs affects similarity, regardless of semantic relevance. It explains why search systems sometimes return long, barely-relevant documents instead of shorter, more precise matches to your query.[^2]
*   **Who is impacted?** Anyone relying on semantic search, from researchers sifting through academic papers to businesses trying to surface the most pertinent information for their customers, is vulnerable to the distortions caused by size bias.
*   **Where does this problem manifest?** This issue isn't confined to a specific search engine or platform. It's a systemic challenge inherent in the way many text embedding models are designed and implemented.
*   **When did this become a pressing concern?** As context windows grow, and models are ingesting larger and larger documents, the problem of size bias becomes amplified.
*   **Why does this happen?** The reasons are complex, but it boils down to the mathematical properties of high-dimensional spaces and the way similarity is calculated. Longer vectors simply have more "surface area" to overlap with a query vector, even if the semantic alignment is weak.
*   **How can we fix it?** Jina AI's blog post likely explores potential mitigation strategies. These might include normalization techniques, architectural modifications to embedding models, or novel similarity metrics that are less susceptible to length-related distortions.

Jina AI's work here isn't just academic; it's a practical intervention. By identifying and analyzing size bias, they're paving the way for more accurate and reliable search technologies. This has real-world implications, influencing everything from information retrieval to content recommendation and beyond.

The latest blog post can be found here: https://jina.ai/news

Ultimately, Jina AI's willingness to confront the inconvenient truths about text embeddings is a testament to their commitment to advancing the field. It's a reminder that progress isn't just about building bigger and more complex models; it's about understanding the nuances and limitations of those models and striving for solutions that prioritize accuracy and relevance above all else. And that's a size-independent truth worth embracing.



[^1]: Size bias refers to how the length of text inputs affects similarity regardless of semantic relevance It explains why search systems sometimes return long barely relevant documents instead of shorter more precise matches to your query [Newsroom - Jina AI](https://jina.ai/news)

[^2]: Size bias refers to how the length of text inputs affects similarity regardless of semantic relevance It explains why search systems sometimes return long barely relevant documents instead of shorter more precise matches to your query [Newsroom - Jina AI](https://jina.ai/news?tag=tech-blog)
Stream finished.
```

## Web Search (Search)

Baseado no `s.jina.ai` da Jina AI: passe uma consulta e obtenha o corpo de texto limpo da página de resultados do buscador (SERP), pronto para alimentar diretamente um LLM para perguntas e respostas conectadas à web e RAG. O endpoint suporta tanto `GET` quanto `POST`.

<Note>
  **Formato de resposta (Markdown por padrão)**: por padrão, retorna uma lista de resultados em **Markdown** concatenada, pronta para alimentar um LLM; quando você precisar de dados estruturados (`title` / `url` / `content` e `usage` de cada resultado), adicione o cabeçalho de requisição `Accept: application/json` para obter JSON.
</Note>

### Parâmetros da Requisição

<ParamField query="q" type="string" required>
  Texto da consulta. Deve ser codificado em URL ao chamar a partir de código.
</ParamField>

<ParamField query="num" type="integer" default="5">
  Número máximo de resultados a retornar; a quantidade real depende de quantos resultados estão disponíveis.
</ParamField>

<ParamField query="gl" type="string">
  Código de país / região, p. ex. `US`.
</ParamField>

<ParamField query="hl" type="string">
  Idioma da interface, p. ex. `en`.
</ParamField>

<ParamField query="site" type="string">
  Restringe a busca a sites específicos; pode ser passado várias vezes, p. ex. `site=jina.ai&site=github.com`.
</ParamField>

<ParamField header="X-Respond-With" type="string" default="markdown">
  Formato do corpo dos resultados, um de `markdown` / `html` / `text`.
</ParamField>

<ParamField header="X-Retain-Images" type="string">
  Política de retenção de imagens; passe `none` para remover imagens e economizar tokens.
</ParamField>

<ParamField header="X-No-Cache" type="boolean">
  Ignora o cache e obtém os resultados mais recentes.
</ParamField>

Além disso, a busca chama o Reader para extrair o corpo de cada resultado, portanto todos os cabeçalhos de requisição `X-*` que controlam a formatação do corpo listados em «Web Reader (Reader)» também se aplicam aos resultados da busca.

### Example of Calling

A consulta e os parâmetros podem ser passados como parâmetros de consulta da URL via `GET` (recomendado, o mais conciso), ou em um corpo de requisição JSON via `POST`; ambos atingem o mesmo endpoint e retornam o mesmo resultado. Os exemplos abaixo adicionam `Accept: application/json` para retornar JSON por padrão; **remova esse cabeçalho para obter uma lista de resultados em Markdown limpa** (veja o primeiro exemplo `Curl-markdown`).

<CodeGroup>
  ```shell Curl-markdown theme={null}
  # Sem o cabeçalho Accept → retorna uma lista de resultados em Markdown concatenada
  curl "https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en" \
    -H "Authorization: Bearer sk-***"
  ```

  ```shell Curl-GET theme={null}
  curl "https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json"
  ```

  ```shell Curl-POST theme={null}
  curl -X POST "https://aihubmix.com/v1/jina/search" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "AIHubMix",
      "num": 5,
      "gl": "US",
      "hl": "en"
    }'
  ```

  ```py Python theme={null}
  import requests

  url = 'https://aihubmix.com/v1/jina/search'
  headers = {
      'Authorization': 'Bearer sk-***',  # Substitua pela sua chave AiHubMix
      'Accept': 'application/json'
  }
  params = {'q': 'AIHubMix', 'num': 5, 'gl': 'US', 'hl': 'en'}

  response = requests.get(url, headers=headers, params=params)
  print(response.json())
  ```

  ```ts TypeScript theme={null}
  const url = 'https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en';

  fetch(url, {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer sk-***', // Substitua pela sua chave AiHubMix
      'Accept': 'application/json'
    }
  })
    .then(res => res.json())
    .then(data => console.log(data))
    .catch(err => console.error(err));
  ```
</CodeGroup>

### Response Description

**Por padrão (sem `Accept`), retorna uma lista Markdown concatenada**, onde cada entrada indica sucessivamente o título, o link de origem, a descrição (se houver) e o corpo:

```text theme={null}
[1] Title: AIHubMix - One Interface, Router All LLMs
[1] URL Source: https://aihubmix.com/?lang=en
[1] Description: Access every major LLM through a single, unified interface. Connect to ChatGPT, Claude, Gemini, DeepSeek and more.
[1] Content:
If requests to http://aihubmix.com fail, you can try using a VPN, or switch to the alternative baseURL: https://api.inferera.com …

[2] Title: AI Models & Pricing - AIHubMix
[2] URL Source: https://aihubmix.com/models?lang=en
[2] Content:
…
```

**Com `Accept: application/json`, retorna JSON estruturado**:

```json theme={null}
{
  "code": 200,
  "status": 200,
  "data": [
    {
      "title": "AIHubMix - One Interface, Router All LLMs",
      "url": "https://aihubmix.com/?lang=en",
      "content": "If requests to http://aihubmix.com fail, you can try using a VPN, or switch to the alternative …",
      "usage": { "tokens": 4244 }
    },
    {
      "title": "AI Models & Pricing - AIHubMix",
      "url": "https://aihubmix.com/models?lang=en",
      "content": "…",
      "usage": { "tokens": 4303 }
    }
  ]
}
```

* `data`: array de resultados da busca (a quantidade é controlada por `num`; o exemplo acima retorna 5, mas apenas os 2 primeiros são mostrados aqui; `content` é o corpo completo, truncado no exemplo), cada um contendo `title`, `url`, `content`, `usage.tokens`.
* **Cobrança**: cobrado pela soma dos `usage.tokens` de cada resultado; a Jina cobra oficialmente um mínimo de **10000 tokens** por busca, então o valor final é o maior dos dois, ou seja, `max(10000, soma dos tokens)`.

## Web Reader (Reader)

Baseado no `r.jina.ai` da Jina AI: passe qualquer URL e obtenha o corpo Markdown limpo dessa página após a conversão, conveniente para extrair conteúdo web e alimentar um LLM. Além de páginas web, também suporta a análise de **imagens** (descritas por um modelo de visão) e **arquivos locais** (PDF, Word / Excel / PPT, HTML, imagens).

<Note>
  **Formato de resposta (Markdown por padrão)**: por padrão, retorna diretamente o **corpo Markdown limpo**, pronto para alimentar um LLM; quando você precisar de **JSON** estruturado com `usage` e campos como `title` / `url` (o corpo fica em `data.content`), adicione o cabeçalho de requisição `Accept: application/json`.
</Note>

### Parâmetros da Requisição

<ParamField path="URL de destino" type="string" required>
  O endereço web a ler, anexado diretamente ao final do caminho do endpoint, p. ex. `/v1/jina/reader/https://jina.ai`.
</ParamField>

<ParamField body="file" type="file">
  O arquivo local a enviar; suporta PDF, Word / Excel / PPT, HTML, imagens, passado no campo `file` via `POST` como `multipart/form-data`.
</ParamField>

<ParamField body="url" type="string">
  Obrigatório ao enviar um arquivo HTML, usado como endereço de referência para resolver os links relativos da página; não é necessário ao enviar um PDF.
</ParamField>

<ParamField header="X-Respond-With" type="string" default="markdown">
  Formato de retorno, um de `markdown` / `html` / `text` / `screenshot` / `pageshot`.
</ParamField>

<ParamField header="X-Retain-Images" type="string" default="all">
  Política de retenção de imagens, uma de `all` / `none` (remover imagens para economizar tokens) / `alt`.
</ParamField>

<ParamField header="X-Retain-Links" type="string" default="all">
  Política de retenção de links, uma de `all` / `none` / `text`.
</ParamField>

<ParamField header="X-With-Generated-Alt" type="boolean">
  Gera automaticamente texto descritivo para imagens sem `alt`.
</ParamField>

<ParamField header="X-With-Links-Summary" type="boolean">
  Resume todos os links no final do corpo.
</ParamField>

<ParamField header="X-With-Images-Summary" type="boolean">
  Resume todas as imagens no final do corpo.
</ParamField>

<ParamField header="X-Engine" type="string">
  Motor de extração, um de `browser` / `direct` / `cf-browser-rendering`.
</ParamField>

<ParamField header="X-Target-Selector" type="string">
  Seletor CSS; extrai apenas a região correspondente da página.
</ParamField>

<ParamField header="X-Remove-Selector" type="string">
  Seletor CSS; remove os elementos correspondentes (p. ex. `header, footer, nav`).
</ParamField>

<ParamField header="X-Timeout" type="integer">
  Tempo limite de extração em segundos, máx. 180.
</ParamField>

<ParamField header="X-No-Cache" type="boolean">
  Ignora o cache e obtém o mais recente.
</ParamField>

<ParamField header="X-Md-Heading-Style" type="string" default="atx">
  Estilo de títulos Markdown, um de `atx` (`#`) / `setext` (sublinhado).
</ParamField>

<ParamField header="X-Md-Bullet-List-Marker" type="string">
  Marcador de lista com marcadores Markdown, um de `-` / `+` / `*`.
</ParamField>

<ParamField header="X-Md-Hr" type="string">
  Estilo da linha horizontal Markdown, p. ex. `***`.
</ParamField>

<ParamField header="X-Md-Link-Style" type="string">
  Estilo de links Markdown, um de `inlined` / `referenced` / `discarded`.
</ParamField>

Os itens acima são apenas as opções comuns. **Todos** os cabeçalhos de requisição `X-*` suportados pela Jina (incluindo toda a família `X-Md-*`) bem como os campos do corpo `POST` (como o script injetado `injectPageScript`) são **encaminhados como estão** pelo gateway; para a lista completa e os valores, consulte a [documentação oficial da Jina](https://r.jina.ai/docs).

### Multimodal Input Format

Reader suporta três tipos de entrada. **Páginas web e imagens** são anexadas diretamente ao final do caminho do endpoint (`GET`); **arquivos locais** são enviados via `POST` como `multipart/form-data`.

#### 1. URL de página web

```text theme={null}
GET /v1/jina/reader/https://example.com
```

#### 2. URL de imagem (retorna uma descrição visual)

O endereço da imagem também é anexado ao final do caminho. Reader usa um modelo de visão para gerar uma **descrição** (uma legenda, não um OCR literal) da imagem e a coloca em `content`.

```text theme={null}
GET /v1/jina/reader/https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
```

#### 3. Enviar um arquivo local (PDF / Word·Excel·PPT / HTML / imagem)

```text theme={null}
POST /v1/jina/reader
Content-Type: multipart/form-data

file=@./doc.pdf              # coloque o arquivo no campo file
url=https://example.com/...  # necessário apenas ao enviar HTML, como endereço de referência para resolver links relativos
```

### Example of Calling

Por padrão, retorna diretamente o corpo Markdown; adicione `Accept: application/json` para obter JSON estruturado. Os parâmetros opcionais são passados como cabeçalhos de requisição `X-*` e são **todos encaminhados como estão** pelo gateway para a Jina (para a lista completa, veja «Parâmetros da Requisição» acima).

#### 1. Ler uma página web

<CodeGroup>
  ```shell Básico (Markdown) theme={null}
  # Sem Accept → retorna diretamente o corpo Markdown limpo
  curl "https://aihubmix.com/v1/jina/reader/https://example.com" \
    -H "Authorization: Bearer sk-***"
  ```

  ```shell Avançado (vários parâmetros) theme={null}
  # Combina vários cabeçalhos X-*, todos encaminhados como estão pelo gateway para a Jina:
  #   remover imagens para economizar tokens · extrair apenas a região #bodyContent · resumir links no final
  curl "https://aihubmix.com/v1/jina/reader/https://en.wikipedia.org/wiki/Large_language_model" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json" \
    -H "X-Retain-Images: none" \
    -H "X-Target-Selector: #bodyContent" \
    -H "X-With-Links-Summary: true"
  ```

  ```shell JSON theme={null}
  curl "https://aihubmix.com/v1/jina/reader/https://example.com" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json"
  ```

  ```py Python theme={null}
  import requests

  url = 'https://aihubmix.com/v1/jina/reader/https://example.com'
  headers = {
      'Authorization': 'Bearer sk-***',  # Substitua pela sua chave AiHubMix
      'Accept': 'application/json'
  }

  response = requests.get(url, headers=headers)
  print(response.json())
  ```

  ```ts TypeScript theme={null}
  const url = 'https://aihubmix.com/v1/jina/reader/https://example.com';

  fetch(url, {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer sk-***', // Substitua pela sua chave AiHubMix
      'Accept': 'application/json'
    }
  })
    .then(res => res.json())
    .then(data => console.log(data))
    .catch(err => console.error(err));
  ```
</CodeGroup>

#### 2. Ler uma imagem

```shell Curl theme={null}
curl "https://aihubmix.com/v1/jina/reader/https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" \
  -H "Authorization: Bearer sk-***" \
  -H "Accept: application/json"
```

#### 3. Enviar um arquivo local

Envie via `POST` + `multipart/form-data`; ao enviar **HTML**, você também deve incluir o campo `url` como endereço de referência. A cobrança é a mesma que a leitura de uma URL.

<CodeGroup>
  ```shell PDF / Imagem / Office theme={null}
  curl -X POST "https://aihubmix.com/v1/jina/reader" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json" \
    -F "file=@./doc.pdf"
  ```

  ```shell HTML (url obrigatório) theme={null}
  curl -X POST "https://aihubmix.com/v1/jina/reader" \
    -H "Authorization: Bearer sk-***" \
    -H "Accept: application/json" \
    -F "file=@./local.html" \
    -F "url=https://example.com/local.html"
  ```
</CodeGroup>

### Response Description

**Por padrão (sem `Accept`), retorna diretamente o corpo Markdown** (ou seja, o conteúdo de `data.content` no JSON abaixo). Por exemplo, ao ler `https://example.com`:

```text theme={null}
This domain is for use in documentation examples without needing permission. Avoid use in operations.

[Learn more](https://iana.org/domains/example)
```

**Com `Accept: application/json`**, retorna JSON estruturado. A estrutura do JSON é a mesma para os três tipos de entrada: `data` é um único objeto contendo `title` / `url` / `content` / `usage.tokens`. Abaixo estão as **respostas reais** para os três tipos de entrada (quando `content` é muito longo, o início é mantido e o restante é omitido com `…`).

**① Ler uma página web** (lendo `https://example.com`):

```json theme={null}
{
  "code": 200,
  "status": 20000,
  "data": {
    "title": "Example Domain",
    "url": "https://example.com/",
    "content": "This domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)",
    "usage": { "tokens": 29 }
  }
}
```

**② Ler uma imagem** (`content` é a descrição gerada pelo modelo de visão):

```json theme={null}
{
  "code": 200,
  "status": 20000,
  "data": {
    "title": "googlelogo_color_272x92dp.png",
    "url": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
    "content": "The logo for Google, consisting of the word Google in lowercase letters, with its colors being blue, red, yellow, and green, representing the company's innovative approach to information and computing services",
    "usage": { "tokens": 38 }
  }
}
```

**③ Enviar um arquivo local** (enviando um artigo PDF; `content` é longo, apenas o início é mostrado):

```json theme={null}
{
  "code": 200,
  "status": 20000,
  "data": {
    "title": "Unnoticeable Backdoor Attacks on Graph Neural Networks",
    "url": "blob:df586d587956e0ca72e50e9e12dc06fc44b7c4b480b8a640a6db7d6f488a7c91",
    "content": "# Unnoticeable Backdoor Attacks on Graph Neural Networks\n\n# Enyan Dai ∗\n\nemd5759@psu.edu\n\nThe Pennsylvania State University\n\nState College, USA\n\n## ABSTRACT\n\nGraph Neural Networks (GNNs) have achieved promising results in various tasks such as node classification and graph classification. …",
    "usage": { "tokens": 20535 }
  }
}
```

* `status`: o código de status de negócio retornado pela Jina upstream; em uma chamada de reader bem-sucedida é `20000` (consistente com o HTTP `200` externo).
* **Cobrança**: cobrado por `data.usage.tokens` (o número real de tokens de saída), **sem cobrança mínima** (diferente do «mínimo de 10000 tokens por busca» da busca); para conteúdo extremamente curto, uma unidade mínima de cobrança é aplicada como piso, de modo que uma cobrança de zero nunca ocorre.

***

Última atualização: 2026-07-03
