/ Модель

Характеристики

Контекст
32 768 токенов
Параметры
1,5 млрд
Лицензия
MIT
Архитектура
qwen2 · dense
Библиотека
sentence-transformers
Опубликована
11 мар 2025

OASIS-code-embedding-1.5B

ЭмбеддингиТекст → embedding5 профессий

Модель Kwaipilot для построения эмбеддингов кода и семантического поиска по фрагментам и репозиториям.

619скачиваний за 30 дней10лайковвеса обновлены20 мар 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

OASIS-code-embedding-1.5B — модель эмбеддингов кода, разработанная Kwaipilot для семантического поиска и извлечения фрагментов кода. Она предназначена для разработчиков и исследователей, создающих системы поиска по репозиториям и коду с учётом контекста программирования.

Модель использует плотную архитектуру Qwen2 с 1,5 млрд параметров и обрабатывает последовательности длиной до 32 768 токенов. По описанию авторов, при обучении применялись анализ программ на уровне репозитория, синтез данных OASIS-instruct и специализированная функция потерь; заявлена высокая точность на тестах поиска кода. Модель принимает текст и выдаёт векторные представления для сравнения семантической близости. В README перечислены тесты для Python, Java, JavaScript, PHP, Go и Ruby.

Для загрузки доступны веса в формате safetensors; указаны библиотека Sentence Transformers и лицензия MIT. В README отмечена проблема совместимости PyTorch 2.5.0 при загрузке с bfloat16: авторы рекомендуют версии 2.4.1 или ниже либо 2.5.1 и выше. Заявления о качестве приведены авторами; подробные значения таблицы бенчмарков в доступной карточке представлены не полностью.

Сценарии применения

  • поиск фрагментов кода по описанию на естественном языке
  • поиск похожих функций и участков кода
  • ранжирование результатов поиска по репозиторию
  • создание векторного индекса исходного кода
  • поиск кода в проектах на Python, Java, JavaScript, PHP, Go и Ruby

Ограничения

Для загрузки с bfloat16 README предупреждает о проблеме с PyTorch 2.5.0 и рекомендует использовать PyTorch 2.4.1 или ниже либо 2.5.1 и выше. Доступная таблица результатов бенчмарков неполная, поэтому проверить заявленное превосходство по ней нельзя.

Для каких профессий подходит5

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Kwaipilot OASIS-1.5B

News 📢

  • 🔥 [2025/03/12] Our latest Code Embedding Model OASIS-code-1.5B is now released.
  • 🔥 [2025/03/12] Our preprint is now available at OASIS-arxiv.

Model Details

Model Name: OASIS (Order-Augmented Strategy for Improved Code Search)

Introduction

OASIS is a state-of-the-art code embedding model developed by Kwaipilot. This model incorporates unique, proprietary methods including repository-level program analysis, the OASIS-instruct data synthesis algorithm, and a specialized fusion loss function, setting new benchmarks in code search efficiency and accuracy.

Intended Use

This model is ideal for developers and researchers engaged in enhancing code retrieval systems. OASIS excels in scenarios requiring semantic understanding and retrieval of code snippets within varied programming contexts.

Training and Performance

OASIS was trained on a synthetic dataset created through repository-level analysis, ensuring broad understanding across different coding styles and languages. It has demonstrated state-of-the-art performance on latest code search benchmarks.

Our preprint is now available OASIS-arxiv.

Performance

SizeCoSQAAdvTestCSN-PyCSN-JaCSN-JSCSN-PHPCSN-GoCSN-RubyAvg
OpenAI-Embedding-Ada-002Unknown0.44230.38080.68020.71490.67500.60620.85630.74720.6378
OpenAI-Text-embedding-3-largeUnknown0.55380.46840.70840.72920.68130.59590.87640.75250.6707
jina-embeddings-v2-base-code161M0.68370.3850.66340.68030.63040.57010.85950.70950.6477
CodeSage-large1.3B0.47530.52670.70770.70210.6950.61330.83710.71920.6595
CodeFuse-CGE-Small3.8B0.56190.46390.69580.68630.65640.61330.86370.73410.6594
OASIS-code-1.5B1.5B0.55770.57270.73690.73970.69800.63840.88210.75470.6975

Usage

Direct Usage

pip install -U torch
pip install -U transformers

Avoid using torch=2.5.0 when loading the model with torch_dtype=torch.bfloat16. For optimal performance and stability, please use PyTorch version 2.4.1 or earlier, or upgrade to 2.5.1 or later.

import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoModel, AutoTokenizer
def last_token_pool(last_hidden_states: Tensor, attention_mask: Tensor) -> Tensor:
    left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
    if left_padding:
        return last_hidden_states[:, -1]
    else:
        sequence_lengths = attention_mask.sum(dim=1) - 1
        batch_size = last_hidden_states.shape[0]
        return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]
# Add query prompt
def get_query_prompt(query: str):
    query_description = 'Given a code search query, retrieve relevant code snippet that answer the query'
    prompt = f'Instruct: {query_description}\nQuery: {query}'
    return prompt
query = "How to do quicksort in python?"

code1 = """def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(1, n - i):
            if arr[j - 1] > arr[j]:
                arr[j - 1], arr[j] = arr[j], arr[j - 1]
                swapped = True
        if not swapped:
            break
    return arr"""
code2 = """def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less = [x for x in arr[1:] if x <= pivot]
        greater = [x for x in arr[1:] if x > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)"""
model = AutoModel.from_pretrained("Kwaipilot/OASIS-code-1.5B", output_hidden_states=True)
tokenizer = AutoTokenizer.from_pretrained("Kwaipilot/OASIS-code-1.5B")

# Tokenize and inference
inputs = tokenizer([get_query_prompt(query), code1, code2], max_length=1024, padding=True, truncation=True, return_tensors='pt')
outputs = model(**inputs)
# Last token pooling
embeddings = last_token_pool(outputs.hidden_states[-1], inputs['attention_mask'])
print(embeddings.shape)
# torch.Size([3, 1536])
embeddings = F.normalize(embeddings, dim=1, p=2)
similarity = embeddings @ embeddings.T
print(similarity[0, 1:])
# tensor([0.6895, 0.8240])

Sentence Transformers

First install the Sentence Transformers library:

pip install -U sentence-transformers

Then you can load this model and run inference.

from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("Kwaipilot/OASIS-code-1.5B")#, model_kwargs={"torch_dtype": torch.bfloat16})
query = "How to do quicksort in python?"
code1 = """def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(1, n - i):
            if arr[j - 1] > arr[j]:
                arr[j - 1], arr[j] = arr[j], arr[j - 1]
                swapped = True
        if not swapped:
            break
    return arr"""
code2 = """def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less = [x for x in arr[1:] if x <= pivot]
        greater = [x for x in arr[1:] if x > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)"""
# Run inference
query_embedding = model.encode([query], prompt_name="query")
code_embeddings = model.encode([code1, code2])
print(code_embeddings.shape)
# (2, 1536)
# Get the similarity scores for the embeddings
print(model.similarity(query_embedding[0], code_embeddings[0]))
print(model.similarity(query_embedding[0], code_embeddings[1]))
# tensor([[0.6895]])
# tensor([[0.8240]])

BibTeX

@misc{kwaipilotoasis,
  title = {Optimized Augmentation Strategy for Improved code Search},
  author = {Kwaipilot team},
  year = {2024},
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · sentence-transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
Qwen2Model
Ревизия весов
c126eeb

0 моделей