# JEV

> [!WARNING]
> نماذج اتخاذ القرار، وخط أنابيب `decision`، و`DecisionConfig` تجريبية: قد يتغير واجهة برمجة التطبيقات الخاصة بها في أي وقت، دون إصدار تحذير مسبق.

JEV هو رأس قرار يقوم بتقييم التسميات أحادية الرمز باستخدام طبقة خطية عند الرمز الأخير في الاستدعاء، مع حد أقصى ناعم مشابه لقيم اللوجيت في رأس نموذج اللغة. تم تقديمه بواسطة [JEV](https://huggingface.co/autotrust/JEV-9B) ويُستخدم أيضًا بواسطة [GEV](https://huggingface.co/autotrust/GEV-26B-Decide).

[JevForDecision](/docs/transformers/v5.23.0/ar/model_doc/jev#transformers.JevForDecision) هو نموذج نقطة التفتيش ورأسه، تمامًا كما أن `ForCausalLM` هو النموذج ورأسه `lm_head`. يقوم بقراءة الملفات التي تُشحن مع رأس نقطة التفتيش، إلى جانب أوزانها (`readout.safetensors` و`decision_config.json` لنماذج قرار vLLM، و`head.safetensors` و`judge_config.json` لـ JEV).

```python
from transformers import pipeline

decide = pipeline("decision", model="autotrust/GEV-26B-Decide")
decide(
    {
        "state": "I was charged twice for my order and want a refund.",
        "questions": {"refund": {"type": "noul", "instructions": "Is a refund requested?"}},
    }
)
```

راجع [خط أنابيب اتخاذ القرار](../main_classes/pipelines#transformers.DecisionPipeline) لأصول الصور.

بدون خط الأنابيب، تُستخدم نماذج اتخاذ القرار على غرار `generate`: حيث يقوم تكوين القرار بإنشاء موجه لكل سؤال (أو موجه واحد لجميع الأسئلة) باستخدام قالب المحادثة، ثم يقوم `decide` بتقييم خيارات كل سؤال، ويحوّل `Question.answer` هذه التقييمات إلى إجابات:

> [!IMPORTANT]
> `from_pretrained` لا يُحمّل LoRA من نقاط التفتيش التي تحتفظ به في مجلد فرعي (`decision_config.adapter`، مثل `adapter/` لـ JEV). يقوم خط الأنابيب بتحميله نيابةً عنك؛ وبدون خط الأنابيب، استدعِ `load_adapter` بنفسك كما هو موضح أدناه، وإلا فإن النموذج سيرد بالأوزان الأساسية.

```python
import torch
from transformers import AutoTokenizer, JevForDecision

repo = "autotrust/JEV-9B"
model = JevForDecision.from_pretrained(repo, dtype=torch.bfloat16, device_map="auto")
tokenizer, config = AutoTokenizer.from_pretrained(repo), model.decision_config  # read from the checkpoint's files
if config.adapter:  # JEV keeps its LoRA in a subfolder: `from_pretrained` doesn't load it, the pipeline does
    model.load_adapter(repo, adapter_kwargs={"subfolder": config.adapter})

request = {
    "state": "I was charged twice for my order and I want my money back today.",
    "questions": {
        "refund": {"type": "noul", "instructions": "Does the customer ask for a refund?"},
        "urgency": {"type": "score", "criteria": ["Can wait", "This week", "Today", "Now"]},
    },
}
answers = {}
for inputs, questions in config.prepare_inputs(request, tokenizer):
    scores = model.decide(**inputs, decision_questions=questions)
    answers |= {q.name: q.answer(s.softmax(-1).tolist()) for q, s in zip(questions, scores)}
```

تقرأ الرأس نفسه رموز الإجابة الـ 255 الخاصة بـ [pplx-decider](https://huggingface.co/perplexity-ai/pplx-decider-v1.1-27b) و [d3](https://huggingface.co/vllm-sr/d3)، حيث يولي العمود الفقري Qwen3.5 اهتمامه بالموجّه بأكمله (`is_causal=False` في `text_config` الخاص بـ `JevForDecision` لديهما). وتُقرأ رأسهما (`readout.safetensors`) وإعداداتهما (`decision_config.json`) كما هي، إلى جانب أوزانهما:

```python
pipeline("decision", model="vllm-sr/d3")(request)  # or perplexity-ai/pplx-decider-v1.1-27b
```

## JevConfig[[transformers.JevConfig]]

#### transformers.JevConfig[[transformers.JevConfig]]

```python
transformers.JevConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 4096, num_verbalizers: int = 24, offsets: dict[str, int] | None = None, softcap: float | None = None, text_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, initializer_range: float = 0.02)
```

[المصدر](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/jev/configuration_jev.py#L101)

**المعاملات:**

hidden_size (`int`، *اختياري*، القيمة الافتراضية `4096`) : بُعد التمثيلات المخفية.

num_verbalizers (`int`، *اختياري*، القيمة الافتراضية 24) : عدد تسميات الرمز الواحد التي تُقيَّم بواسطة الرأس، لجميع أنواع الأسئلة.

offsets (`dict[str, int]`، *اختياري*، القيمة الافتراضية `{"noul" : 0, "score": 2, "choice": 8}`): صف أول تسمية لكل نوع من أنواع الأسئلة: تُقيَّم خيارات السؤال بالصفوف بدءًا من `offsets[question.type]`، بالترتيب.

softcap (`float`، *اختياري*) : الحد الأقصى الناعم للنتائج، `softcap * tanh(scores / softcap)`، على غرار القيم المنطقية (logits) لرأس نموذج اللغة.

text_config (`dict` أو `PreTrainedConfig`، *اختياري*) : إعدادات النموذج الذي يقرأه الرأس، أي ملف `config.json` الخاص بمستودعه.

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

هذه فئة الإعدادات المخزنة لإعدادات نموذج JevModel. تُستخدم لاستحداث نموذج Jev وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [autotrust/JEV-9B](https://huggingface.co/autotrust/JEV-9B)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/v5.23.0/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/v5.23.0/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

مثال:
```python
>>> from transformers import JevConfig, JevForDecision

>>> model = JevForDecision(JevConfig(hidden_size=4096))
```

#### decision_config[[transformers.JevConfig.decision_config]]

```python
decision_config(head_configs: dict, text_config: dict)
```

[المصدر](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/jev/configuration_jev.py#L134)

إعدادات القرار لنقطة تحقق تُشحن مع رأس JEV إلى جانب أوزانها، من ملفات الإعداد الخاصة بها.

## JevForDecision[[transformers.JevForDecision]]

#### transformers.JevForDecision[[transformers.JevForDecision]]

```python
transformers.JevForDecision(config: JevConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/jev/modeling_jev.py#L38)

**المعاملات:**

config ([JevConfig](/docs/transformers/v5.23.0/ar/model_doc/jev#transformers.JevConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/v5.23.0/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

JEV (autotrust/JEV-9B): نموذج مستودعه ورأس قرار، درجات خطية لوسوم أحادية الرمز عند الرمز الذي يسبق `<|mark|>` لكل سؤال، مقيدة ناعماً كما هي مخرجات رأس نموذج اللغة.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/v5.23.0/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.JevForDecision.forward]]

```python
forward(input_ids: LongTensor, marks: LongTensor, num_options: LongTensor, question_type_ids: LongTensor, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/jev/modeling_jev.py#L45)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`) : مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على المؤشرات باستخدام [AutoTokenizer](/docs/transformers/v5.23.0/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

marks (`torch.LongTensor` من الشكل `(num_marks,)`) : المواضع المسجلة بواسطة `<|mark|>` في قالب القرار: عدد الرموز في الاستدعاء قبل كل منها.

num_options (`torch.LongTensor` من الشكل `(num_questions,)`) : عدد الخيارات لكل سؤال في الاستعلام.

question_type_ids (`torch.LongTensor` من الشكل `(num_questions,)`) : نوع كل سؤال في الأمر، كمؤشره في `Question.questions_types`.

**يعيد:**

`torch.Tensor`

تتجاوز طريقة [JevForDecision](/docs/transformers/v5.23.0/ar/model_doc/jev#transformers.JevForDecision) الأمامية (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

