Franskaman110 commited on
Commit
97d967b
·
1 Parent(s): d9d3fe7

Fix tokenizer output

Browse files
Files changed (2) hide show
  1. requirements.txt +1 -1
  2. src/backend/llm/client.py +15 -13
requirements.txt CHANGED
@@ -1,6 +1,6 @@
1
  transformers
2
- sentencepiece
3
  sentence-transformers
 
4
  accelerate
5
  faiss-cpu
6
  numpy
 
1
  transformers
 
2
  sentence-transformers
3
+ sentencepiece
4
  accelerate
5
  faiss-cpu
6
  numpy
src/backend/llm/client.py CHANGED
@@ -97,26 +97,31 @@ class _LocalTransformersClient(LLMClient):
97
  )
98
  self._model.eval()
99
 
 
 
 
 
 
 
 
 
 
 
100
  def chat(self, messages: list[ChatMessage], **kwargs) -> str:
101
  import torch
102
 
103
  self._ensure_loaded()
104
- chat_messages = [{"role": m.role, "content": m.content} for m in messages]
105
- inputs = self._tokenizer.apply_chat_template(
106
- chat_messages,
107
- add_generation_prompt=True,
108
- return_tensors="pt",
109
- ).to(self._model.device)
110
  temperature = kwargs.get("temperature", self.temperature)
111
  with torch.no_grad():
112
  out = self._model.generate(
113
- inputs,
114
  max_new_tokens=kwargs.get("max_new_tokens", self.max_new_tokens),
115
  do_sample=temperature > 0,
116
  temperature=temperature if temperature > 0 else None,
117
  pad_token_id=self._tokenizer.eos_token_id,
118
  )
119
- generated = out[0][inputs.shape[-1] :] # noqa
120
  return self._tokenizer.decode(generated, skip_special_tokens=True).strip()
121
 
122
  def stream(self, messages: list[ChatMessage], **kwargs):
@@ -127,16 +132,13 @@ class _LocalTransformersClient(LLMClient):
127
  from transformers import TextIteratorStreamer
128
 
129
  self._ensure_loaded()
130
- chat_messages = [{"role": m.role, "content": m.content} for m in messages]
131
- inputs = self._tokenizer.apply_chat_template(
132
- chat_messages, add_generation_prompt=True, return_tensors="pt"
133
- ).to(self._model.device)
134
  temperature = kwargs.get("temperature", self.temperature)
135
  streamer = TextIteratorStreamer(
136
  self._tokenizer, skip_prompt=True, skip_special_tokens=True
137
  )
138
  gen_kwargs = dict(
139
- input_ids=inputs,
140
  streamer=streamer,
141
  max_new_tokens=kwargs.get("max_new_tokens", self.max_new_tokens),
142
  do_sample=temperature > 0,
 
97
  )
98
  self._model.eval()
99
 
100
+ def _tokenize_chat(self, messages: list[ChatMessage]):
101
+ """Apply the chat template and return input_ids as a (1, S) tensor."""
102
+ import torch
103
+
104
+ chat_messages = [{"role": m.role, "content": m.content} for m in messages]
105
+ token_ids = self._tokenizer.apply_chat_template(
106
+ chat_messages, add_generation_prompt=True,
107
+ )
108
+ return torch.tensor([token_ids], device=self._model.device)
109
+
110
  def chat(self, messages: list[ChatMessage], **kwargs) -> str:
111
  import torch
112
 
113
  self._ensure_loaded()
114
+ input_ids = self._tokenize_chat(messages)
 
 
 
 
 
115
  temperature = kwargs.get("temperature", self.temperature)
116
  with torch.no_grad():
117
  out = self._model.generate(
118
+ input_ids,
119
  max_new_tokens=kwargs.get("max_new_tokens", self.max_new_tokens),
120
  do_sample=temperature > 0,
121
  temperature=temperature if temperature > 0 else None,
122
  pad_token_id=self._tokenizer.eos_token_id,
123
  )
124
+ generated = out[0][input_ids.shape[-1] :] # noqa
125
  return self._tokenizer.decode(generated, skip_special_tokens=True).strip()
126
 
127
  def stream(self, messages: list[ChatMessage], **kwargs):
 
132
  from transformers import TextIteratorStreamer
133
 
134
  self._ensure_loaded()
135
+ input_ids = self._tokenize_chat(messages)
 
 
 
136
  temperature = kwargs.get("temperature", self.temperature)
137
  streamer = TextIteratorStreamer(
138
  self._tokenizer, skip_prompt=True, skip_special_tokens=True
139
  )
140
  gen_kwargs = dict(
141
+ input_ids=input_ids,
142
  streamer=streamer,
143
  max_new_tokens=kwargs.get("max_new_tokens", self.max_new_tokens),
144
  do_sample=temperature > 0,