gbrabbit commited on
Commit
0c85293
Β·
1 Parent(s): bbb2501

Auto commit at 10-2025-08 0:04:50

Browse files
lily_llm_api/app_v2.py CHANGED
@@ -45,7 +45,7 @@ from lily_llm_core.vector_store_manager import vector_store_manager
45
  # from latex_ocr_faiss_simple import LatexOCRFAISSSimple
46
 
47
  # λ©€ν‹°λͺ¨λ‹¬ RAG ν”„λ‘œμ„Έμ„œ μΆ”κ°€
48
- from lily_llm_core.hybrid_rag_processor import hybrid_rag_processor
49
 
50
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
51
  logger = logging.getLogger(__name__)
@@ -176,7 +176,7 @@ def select_model_interactive():
176
  try:
177
  # choice = input(f"\nπŸ“ μ‚¬μš©ν•  λͺ¨λΈ 번호λ₯Ό μ„ νƒν•˜μ„Έμš” (1-{len(available_models)}): ")
178
  # selected_model = available_models[int(choice) - 1]
179
- selected_model = available_models[0]
180
  print(f"\nβœ… '{selected_model['name']}' λͺ¨λΈμ„ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.")
181
  return selected_model['model_id']
182
  except (ValueError, IndexError):
@@ -276,35 +276,75 @@ def generate_sync(prompt: str, image_data_list: Optional[List[bytes]], max_lengt
276
 
277
  # --- 1. 이미지 처리 (이미지가 μžˆλŠ” κ²½μš°μ—λ§Œ μ‹€ν–‰) ---
278
  if image_data_list and getattr(current_profile, 'multimodal', False):
279
- logger.info(f"πŸ–ΌοΈ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ 처리 μ‹œμž‘... (이미지 {len(image_data_list)}개)")
 
 
280
  image_processed = True
281
- all_image_metas = []
282
-
283
- for i, image_data in enumerate(image_data_list):
284
- pil_image = Image.open(io.BytesIO(image_data)).convert("RGB")
285
- processed_data = image_processor(pil_image)
286
- all_pixel_values.append(processed_data["pixel_values"])
287
- all_image_metas.append(processed_data["image_meta"])
288
-
289
- # λͺ¨λ“  이미지 메타데이터λ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜κΈ°
290
- if all_image_metas:
291
- combined_image_metas = {}
292
- for key in all_image_metas[0].keys():
293
- combined_image_metas[key] = [meta[key] for meta in all_image_metas]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
294
 
295
  # --- 2. ν”„λ‘¬ν”„νŠΈ ꡬ성 ---
296
- image_tokens = "<image>" * len(all_pixel_values)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  # Kanana κΈ°λ³Έ 포맷. ν…μŠ€νŠΈ-only λͺ¨λΈμ€ profile.format_prompt둜 λŒ€μ²΄λ¨
298
  formatted_prompt = f"<|im_start|>user\n{image_tokens}{prompt}<|im_end|>\n<|im_start|>assistant\n"
299
 
300
  # --- 3. ν† ν¬λ‚˜μ΄μ§• ---
301
- if hasattr(tokenizer, 'encode_prompt'):
302
- inputs = tokenizer.encode_prompt(prompt=formatted_prompt, image_meta=combined_image_metas)
303
- input_ids = inputs['input_ids']
304
- attention_mask = inputs['attention_mask']
305
- else:
306
- # ν…μŠ€νŠΈ-only λͺ¨λΈμ˜ ꢌμž₯ ν”„λ‘¬ν”„νŠΈ μ‚¬μš©
307
- if not getattr(current_profile, 'multimodal', False) and hasattr(current_profile, 'format_prompt'):
308
  formatted_prompt = current_profile.format_prompt(prompt)
309
  inputs = tokenizer(
310
  formatted_prompt,
@@ -317,6 +357,26 @@ def generate_sync(prompt: str, image_data_list: Optional[List[bytes]], max_lengt
317
  del inputs['token_type_ids']
318
  input_ids = inputs['input_ids']
319
  attention_mask = inputs['attention_mask']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
 
321
  if input_ids.dim() == 1:
322
  input_ids = input_ids.unsqueeze(0)
@@ -336,12 +396,18 @@ def generate_sync(prompt: str, image_data_list: Optional[List[bytes]], max_lengt
336
  if temperature is not None: gen_config['temperature'] = temperature
337
  if top_p is not None: gen_config['top_p'] = top_p
338
  if do_sample is not None: gen_config['do_sample'] = do_sample
 
 
 
 
 
339
  # pad/eos 보완 (일뢀 ν† ν¬λ‚˜μ΄μ €λŠ” pad_token λ―Έμ •μ˜)
340
  if gen_config.get('pad_token_id') is None and hasattr(tokenizer, 'pad_token_id'):
341
  gen_config['pad_token_id'] = tokenizer.pad_token_id or tokenizer.eos_token_id
342
  if gen_config.get('eos_token_id') is None and hasattr(tokenizer, 'eos_token_id'):
343
  gen_config['eos_token_id'] = tokenizer.eos_token_id
344
 
 
345
  with torch.no_grad():
346
  if image_processed:
347
  # λ©€ν‹°λͺ¨λ‹¬ 생성
@@ -359,11 +425,15 @@ def generate_sync(prompt: str, image_data_list: Optional[List[bytes]], max_lengt
359
  attention_mask=attention_mask,
360
  **gen_config
361
  )
 
362
 
363
  # --- 5. 응닡 μΆ”μΆœ (곡톡 둜직) ---
364
  try:
 
365
  full_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
366
  response = current_profile.extract_response(full_text, formatted_prompt)
 
 
367
  return {"text": response, "image_processed": image_processed}
368
  except Exception as e:
369
  logger.error(f"❌ 응닡 μΆ”μΆœ 쀑 였λ₯˜: {e}")
 
45
  # from latex_ocr_faiss_simple import LatexOCRFAISSSimple
46
 
47
  # λ©€ν‹°λͺ¨λ‹¬ RAG ν”„λ‘œμ„Έμ„œ μΆ”κ°€
48
+ # from lily_llm_core.hybrid_rag_processor import hybrid_rag_processor
49
 
50
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
51
  logger = logging.getLogger(__name__)
 
176
  try:
177
  # choice = input(f"\nπŸ“ μ‚¬μš©ν•  λͺ¨λΈ 번호λ₯Ό μ„ νƒν•˜μ„Έμš” (1-{len(available_models)}): ")
178
  # selected_model = available_models[int(choice) - 1]
179
+ selected_model = available_models[1]
180
  print(f"\nβœ… '{selected_model['name']}' λͺ¨λΈμ„ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.")
181
  return selected_model['model_id']
182
  except (ValueError, IndexError):
 
276
 
277
  # --- 1. 이미지 처리 (이미지가 μžˆλŠ” κ²½μš°μ—λ§Œ μ‹€ν–‰) ---
278
  if image_data_list and getattr(current_profile, 'multimodal', False):
279
+ # 닀쀑 이미지 κ²½λŸ‰ 처리: μ΅œλŒ€ 4μž₯, 512 썸넀일
280
+ max_images = min(len(image_data_list), 4)
281
+ logger.info(f"πŸ–ΌοΈ λ©€ν‹°λͺ¨λ‹¬(Lite) 처리 μ‹œμž‘... (원본 이미지 {len(image_data_list)}개 β†’ {max_images}개 μ‚¬μš©)")
282
  image_processed = True
283
+ try:
284
+ metas_list = []
285
+ for idx, image_bytes in enumerate(image_data_list[:max_images]):
286
+ try:
287
+ pil_image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
288
+ pil_image.thumbnail((512, 512))
289
+ processed = image_processor(pil_image)
290
+ all_pixel_values.append(processed["pixel_values"]) # λ¦¬μŠ€νŠΈμ— μΆ”κ°€
291
+ metas_list.append(processed.get("image_meta", {}))
292
+ except Exception as ie:
293
+ logger.warning(f"⚠️ 이미지 {idx}: μ „μ²˜λ¦¬ μ‹€νŒ¨: {ie}")
294
+ # 메타λ₯Ό 킀별 리슀트둜 κ²°ν•©
295
+ if metas_list:
296
+ combined_image_metas = {}
297
+ for key in metas_list[0].keys():
298
+ combined_image_metas[key] = [m.get(key) for m in metas_list]
299
+ # image_token_thwκ°€ μ—†μœΌλ©΄ vision_grid_thwλ₯Ό 기반으둜 생성
300
+ if 'image_token_thw' not in combined_image_metas and 'vision_grid_thw' in combined_image_metas:
301
+ token_thw_list = []
302
+ for grid in combined_image_metas['vision_grid_thw']:
303
+ # gridλŠ” (T,H,W) λ˜λŠ” ν…μ„œ/리슀트 ν˜•νƒœ
304
+ try:
305
+ if hasattr(grid, 'tolist'):
306
+ grid = grid.tolist()
307
+ if isinstance(grid, (list, tuple)):
308
+ T, H, W = int(grid[0]), int(grid[1]), int(grid[2])
309
+ else:
310
+ # 단일 값이면 H=W=1 κ°€μ •
311
+ T, H, W = 1, 1, int(grid)
312
+ except Exception:
313
+ T, H, W = 1, 1, 1
314
+ token_thw_list.append([T, H, W])
315
+ combined_image_metas['image_token_thw'] = token_thw_list
316
+ else:
317
+ combined_image_metas = None
318
+ except Exception as e:
319
+ logger.error(f"❌ 이미지 μ „μ²˜λ¦¬ μ‹€νŒ¨(κ²½λŸ‰-닀쀑): {e}")
320
+ image_processed = False
321
+ combined_image_metas = None
322
 
323
  # --- 2. ν”„λ‘¬ν”„νŠΈ ꡬ성 ---
324
+ # 이미지 토큰 자리수: λ©€ν‹°λͺ¨λ‹¬μΌ λ•Œ μΆ©λΆ„ν•œ 수λ₯Ό 미리 확보(동적 계산 κ³€λž€μ‹œ λ³΄μˆ˜κ°’ μ‚¬μš©)
325
+ if all_pixel_values:
326
+ # image_token_thw μ΄ν•©μœΌλ‘œ 자리수 계산 (μ—†μœΌλ©΄ 128 x N)
327
+ image_placeholder_count = 0
328
+ if combined_image_metas and 'image_token_thw' in combined_image_metas:
329
+ for thw in combined_image_metas['image_token_thw']:
330
+ try:
331
+ T, H, W = int(thw[0]), int(thw[1]), int(thw[2])
332
+ image_placeholder_count += max(1, T * H * W)
333
+ except Exception:
334
+ image_placeholder_count += 128
335
+ else:
336
+ image_placeholder_count = 128 * len(all_pixel_values)
337
+ image_tokens = "<image>" * image_placeholder_count
338
+ else:
339
+ image_tokens = ""
340
  # Kanana κΈ°λ³Έ 포맷. ν…μŠ€νŠΈ-only λͺ¨λΈμ€ profile.format_prompt둜 λŒ€μ²΄λ¨
341
  formatted_prompt = f"<|im_start|>user\n{image_tokens}{prompt}<|im_end|>\n<|im_start|>assistant\n"
342
 
343
  # --- 3. ν† ν¬λ‚˜μ΄μ§• ---
344
+ t_tok_start = time.time()
345
+ if not image_data_list:
346
+ # ν…μŠ€νŠΈ-only κ³ μ • 경둜 (더 빠름)
347
+ if hasattr(current_profile, 'format_prompt'):
 
 
 
348
  formatted_prompt = current_profile.format_prompt(prompt)
349
  inputs = tokenizer(
350
  formatted_prompt,
 
357
  del inputs['token_type_ids']
358
  input_ids = inputs['input_ids']
359
  attention_mask = inputs['attention_mask']
360
+ else:
361
+ # λ©€ν‹°λͺ¨λ‹¬(Lite): Kanana μ „μš© encode_prompt둜 -1 토큰 자리 생성 (ν•„μˆ˜)
362
+ if hasattr(tokenizer, 'encode_prompt'):
363
+ inputs = tokenizer.encode_prompt(prompt=formatted_prompt, image_meta=combined_image_metas)
364
+ input_ids = inputs['input_ids']
365
+ attention_mask = inputs['attention_mask']
366
+ else:
367
+ # μ•ˆμ „ 폴백
368
+ inputs = tokenizer(
369
+ formatted_prompt,
370
+ return_tensors="pt",
371
+ padding=True,
372
+ truncation=True,
373
+ max_length=256,
374
+ )
375
+ if 'token_type_ids' in inputs:
376
+ del inputs['token_type_ids']
377
+ input_ids = inputs['input_ids']
378
+ attention_mask = inputs['attention_mask']
379
+ t_tok_end = time.time()
380
 
381
  if input_ids.dim() == 1:
382
  input_ids = input_ids.unsqueeze(0)
 
396
  if temperature is not None: gen_config['temperature'] = temperature
397
  if top_p is not None: gen_config['top_p'] = top_p
398
  if do_sample is not None: gen_config['do_sample'] = do_sample
399
+ if not image_data_list:
400
+ # ν…μŠ€νŠΈ-only: 탐색 λΉ„ν™œμ„±ν™”λ‘œ 속도 ν–₯상
401
+ gen_config['do_sample'] = False
402
+ gen_config.pop('top_k', None)
403
+ gen_config.pop('top_p', None)
404
  # pad/eos 보완 (일뢀 ν† ν¬λ‚˜μ΄μ €λŠ” pad_token λ―Έμ •μ˜)
405
  if gen_config.get('pad_token_id') is None and hasattr(tokenizer, 'pad_token_id'):
406
  gen_config['pad_token_id'] = tokenizer.pad_token_id or tokenizer.eos_token_id
407
  if gen_config.get('eos_token_id') is None and hasattr(tokenizer, 'eos_token_id'):
408
  gen_config['eos_token_id'] = tokenizer.eos_token_id
409
 
410
+ t_gen_start = time.time()
411
  with torch.no_grad():
412
  if image_processed:
413
  # λ©€ν‹°λͺ¨λ‹¬ 생성
 
425
  attention_mask=attention_mask,
426
  **gen_config
427
  )
428
+ t_gen_end = time.time()
429
 
430
  # --- 5. 응닡 μΆ”μΆœ (곡톡 둜직) ---
431
  try:
432
+ t_dec_start = time.time()
433
  full_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
434
  response = current_profile.extract_response(full_text, formatted_prompt)
435
+ t_dec_end = time.time()
436
+ logger.info(f"⏱️ timing: tokenization={(t_tok_end - t_tok_start):.2f}s, generate={(t_gen_end - t_gen_start):.2f}s, decode={(t_dec_end - t_dec_start):.2f}s")
437
  return {"text": response, "image_processed": image_processed}
438
  except Exception as e:
439
  logger.error(f"❌ 응닡 μΆ”μΆœ 쀑 였λ₯˜: {e}")
lily_llm_api/models/kanana_1_5_v_3b_instruct.py CHANGED
@@ -157,7 +157,8 @@ class Kanana15V3bInstructProfile:
157
  if use_local:
158
  # 둜컬 λͺ¨λΈ: μ»€μŠ€ν…€ λͺ¨λΈλ§ 클래슀 μ‚¬μš©
159
  logger.info("πŸ” DEBUG: 둜컬 λͺ¨λΈ λ‘œλ“œ μ‹œλ„")
160
- selected_dtype = torch.float16 if DEVICE == "cuda" else torch.float32
 
161
  model = KananaVForConditionalGeneration.from_pretrained(
162
  model_path,
163
  token=HF_TOKEN,
@@ -178,7 +179,7 @@ class Kanana15V3bInstructProfile:
178
 
179
  logger.info("πŸ” DEBUG: KananaVForConditionalGeneration.from_pretrained 호좜")
180
  # CPU ν™˜κ²½μ—μ„œ float16/bfloat16보닀 float32κ°€ 더 μ•ˆμ •μ μΈ κ²½μš°κ°€ 많음
181
- selected_dtype = torch.float16 if DEVICE == "cuda" else torch.float32
182
  model = KananaVForConditionalGeneration.from_pretrained(
183
  model_path,
184
  token=HF_TOKEN,
 
157
  if use_local:
158
  # 둜컬 λͺ¨λΈ: μ»€μŠ€ν…€ λͺ¨λΈλ§ 클래슀 μ‚¬μš©
159
  logger.info("πŸ” DEBUG: 둜컬 λͺ¨λΈ λ‘œλ“œ μ‹œλ„")
160
+ selected_dtype = torch.float16 if DEVICE == "cuda" else torch.float16
161
+ logger.info(f"πŸ” DEBUG: selected_dtype = {selected_dtype}")
162
  model = KananaVForConditionalGeneration.from_pretrained(
163
  model_path,
164
  token=HF_TOKEN,
 
179
 
180
  logger.info("πŸ” DEBUG: KananaVForConditionalGeneration.from_pretrained 호좜")
181
  # CPU ν™˜κ²½μ—μ„œ float16/bfloat16보닀 float32κ°€ 더 μ•ˆμ •μ μΈ κ²½μš°κ°€ 많음
182
+ selected_dtype = torch.float16 if DEVICE == "cuda" else torch.float16
183
  model = KananaVForConditionalGeneration.from_pretrained(
184
  model_path,
185
  token=HF_TOKEN,
lily_llm_api/models/modeling.py CHANGED
@@ -452,7 +452,8 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
452
  )
453
  layer_index = self.config.projector_config.feature_layer_index
454
  visual_features_list.append(self._get_visual_feature_at(v_outputs.hidden_states, layer_index))
455
- return visual_features_list # 리슀트 ν˜•νƒœλ‘œ λ°˜ν™˜
 
456
  else:
457
  # 단일 이미지 - 이미 λΆ„λ¦¬λœ νŠΉμ§• ν…μ„œ
458
 
@@ -509,26 +510,17 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
509
 
510
  # ✨ 핡심 μˆ˜μ •: visual_featuresκ°€ 리슀트일 경우 처리
511
  if isinstance(visual_features, list):
512
- print(f"πŸ” forward_projector - 리슀트 ν˜•νƒœ 처리")
513
  visual_embeds_list = []
514
  for i, vf in enumerate(visual_features):
515
  single_image_metas = {k: v[i] for k, v in image_metas.items()}
516
- # grid_thw 처리 μˆ˜μ •
517
  vision_grid_thw = single_image_metas["vision_grid_thw"]
518
  if isinstance(vision_grid_thw, (list, tuple)):
519
- # νŠœν”Œμ„ 리슀트둜 λ³€ν™˜ν•˜μ—¬ ν…μ„œ 생성
520
  grid_thw = torch.tensor([list(vision_grid_thw)]).to(vf.device)
521
  else:
522
  grid_thw = torch.tensor([vision_grid_thw]).to(vf.device)
523
-
524
- print(f"πŸ” forward_projector - 이미지 {i} 처리 쀑")
525
- print(f"πŸ” forward_projector - 이미지 {i} νŠΉμ§• ν˜•νƒœ: {vf.shape}")
526
- print(f"πŸ” forward_projector - 이미지 {i} grid_thw: {grid_thw}")
527
-
528
  visual_embeds = self.abstractor(vf, grid_thw=grid_thw)["last_hidden_state"]
529
- print(f"πŸ” forward_projector - 이미지 {i} visual_embeds ν˜•νƒœ: {visual_embeds.shape}")
530
  visual_embeds_list.append(visual_embeds)
531
- return torch.cat(visual_embeds_list, dim=0) # μ΅œμ’…μ μœΌλ‘œ ν•˜λ‚˜μ˜ ν…μ„œλ‘œ ν•©μ³μ„œ λ°˜ν™˜
532
  else:
533
  # 단일 이미지
534
  print(f"πŸ” forward_projector - 단일 ν…μ„œ 처리")
@@ -737,9 +729,12 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
737
  if "image_token_thw" in single_image_metas:
738
  token_thw = single_image_metas["image_token_thw"]
739
  if isinstance(token_thw, (list, tuple)):
740
- tokens_per_image = token_thw[0] * token_thw[1] * token_thw[2]
 
 
 
741
  else:
742
- tokens_per_image = token_thw[0] * token_thw[1] * token_thw[2]
743
  print(f"πŸ” prepare_mm_inputs - 이미지 {i} μ‹€μ œ 토큰 수: {tokens_per_image}")
744
  else:
745
  # κΈ°λ³Έκ°’ μ‚¬μš©
@@ -833,6 +828,11 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
833
  # visual embeds와 -1 토큰 개수 확인 및 μ‘°μ •
834
  num_visual_tokens = flattened_visual_embeds.shape[0]
835
  num_neg_one_tokens = (flattened_input_ids == -1).sum().item()
 
 
 
 
 
836
  print(f"πŸ” prepare_mm_inputs - visual embeds 개수: {num_visual_tokens}")
837
  print(f"πŸ” prepare_mm_inputs - -1 토큰 개수: {num_neg_one_tokens}")
838
 
@@ -857,8 +857,9 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
857
  flattened_visual_embeds = repeated_embeds
858
  else:
859
  # visual embedsκ°€ λ„ˆλ¬΄ 적으면 첫 번째 토큰을 반볡
860
- first_token = flattened_visual_embeds[0:1].repeat(num_neg_one_tokens, 1)
861
- flattened_visual_embeds = first_token
 
862
 
863
  print(f"πŸ” prepare_mm_inputs - visual embeds 반볡: {num_visual_tokens} -> {num_neg_one_tokens}")
864
 
 
452
  )
453
  layer_index = self.config.projector_config.feature_layer_index
454
  visual_features_list.append(self._get_visual_feature_at(v_outputs.hidden_states, layer_index))
455
+ # κ²½λŸ‰ λ©€ν‹°λͺ¨λ‹¬: 첫 번째 κ²ƒλ§Œ μ‚¬μš©ν•˜λ˜, downstream이 단일 ν…μ„œλ₯Ό κΈ°λŒ€ν•˜λ―€λ‘œ ν…μ„œλ§Œ λ°˜ν™˜
456
+ return visual_features_list[0] if len(visual_features_list) > 0 else visual_features_list
457
  else:
458
  # 단일 이미지 - 이미 λΆ„λ¦¬λœ νŠΉμ§• ν…μ„œ
459
 
 
510
 
511
  # ✨ 핡심 μˆ˜μ •: visual_featuresκ°€ 리슀트일 경우 처리
512
  if isinstance(visual_features, list):
 
513
  visual_embeds_list = []
514
  for i, vf in enumerate(visual_features):
515
  single_image_metas = {k: v[i] for k, v in image_metas.items()}
 
516
  vision_grid_thw = single_image_metas["vision_grid_thw"]
517
  if isinstance(vision_grid_thw, (list, tuple)):
 
518
  grid_thw = torch.tensor([list(vision_grid_thw)]).to(vf.device)
519
  else:
520
  grid_thw = torch.tensor([vision_grid_thw]).to(vf.device)
 
 
 
 
 
521
  visual_embeds = self.abstractor(vf, grid_thw=grid_thw)["last_hidden_state"]
 
522
  visual_embeds_list.append(visual_embeds)
523
+ return torch.cat(visual_embeds_list, dim=0)
524
  else:
525
  # 단일 이미지
526
  print(f"πŸ” forward_projector - 단일 ν…μ„œ 처리")
 
729
  if "image_token_thw" in single_image_metas:
730
  token_thw = single_image_metas["image_token_thw"]
731
  if isinstance(token_thw, (list, tuple)):
732
+ tokens_per_image = int(token_thw[0]) * int(token_thw[1]) * int(token_thw[2])
733
+ elif hasattr(token_thw, 'tolist'):
734
+ tlist = token_thw.tolist()
735
+ tokens_per_image = int(tlist[0]) * int(tlist[1]) * int(tlist[2])
736
  else:
737
+ tokens_per_image = int(token_thw)
738
  print(f"πŸ” prepare_mm_inputs - 이미지 {i} μ‹€μ œ 토큰 수: {tokens_per_image}")
739
  else:
740
  # κΈ°λ³Έκ°’ μ‚¬μš©
 
828
  # visual embeds와 -1 토큰 개수 확인 및 μ‘°μ •
829
  num_visual_tokens = flattened_visual_embeds.shape[0]
830
  num_neg_one_tokens = (flattened_input_ids == -1).sum().item()
831
+ if num_neg_one_tokens == 0:
832
+ # -1 토큰이 μ—†μœΌλ©΄ λ¬Έμž₯ μ‹œμž‘λΆ€μ— μ‹œκ° 토큰을 κ°•μ œ μ‚½μž…ν•˜κΈ° μœ„ν•΄ κ°€μ§œ -1 토큰 ν•˜λ‚˜ μΆ”κ°€
833
+ fake_neg = torch.full_like(flattened_input_ids[:1], -1)
834
+ flattened_input_ids = torch.cat([fake_neg, flattened_input_ids], dim=0)
835
+ num_neg_one_tokens = 1
836
  print(f"πŸ” prepare_mm_inputs - visual embeds 개수: {num_visual_tokens}")
837
  print(f"πŸ” prepare_mm_inputs - -1 토큰 개수: {num_neg_one_tokens}")
838
 
 
857
  flattened_visual_embeds = repeated_embeds
858
  else:
859
  # visual embedsκ°€ λ„ˆλ¬΄ 적으면 첫 번째 토큰을 반볡
860
+ # μ΅œμ†Œ 1κ°œλΌλ„ μœ μ§€
861
+ base = flattened_visual_embeds[0:1]
862
+ flattened_visual_embeds = base.repeat(max(1, num_neg_one_tokens), 1)
863
 
864
  print(f"πŸ” prepare_mm_inputs - visual embeds 반볡: {num_visual_tokens} -> {num_neg_one_tokens}")
865
 
modeling.py CHANGED
@@ -452,7 +452,8 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
452
  )
453
  layer_index = self.config.projector_config.feature_layer_index
454
  visual_features_list.append(self._get_visual_feature_at(v_outputs.hidden_states, layer_index))
455
- return visual_features_list # 리슀트 ν˜•νƒœλ‘œ λ°˜ν™˜
 
456
  else:
457
  # 단일 이미지 - 이미 λΆ„λ¦¬λœ νŠΉμ§• ν…μ„œ
458
 
@@ -509,26 +510,17 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
509
 
510
  # ✨ 핡심 μˆ˜μ •: visual_featuresκ°€ 리슀트일 경우 처리
511
  if isinstance(visual_features, list):
512
- print(f"πŸ” forward_projector - 리슀트 ν˜•νƒœ 처리")
513
  visual_embeds_list = []
514
  for i, vf in enumerate(visual_features):
515
  single_image_metas = {k: v[i] for k, v in image_metas.items()}
516
- # grid_thw 처리 μˆ˜μ •
517
  vision_grid_thw = single_image_metas["vision_grid_thw"]
518
  if isinstance(vision_grid_thw, (list, tuple)):
519
- # νŠœν”Œμ„ 리슀트둜 λ³€ν™˜ν•˜μ—¬ ν…μ„œ 생성
520
  grid_thw = torch.tensor([list(vision_grid_thw)]).to(vf.device)
521
  else:
522
  grid_thw = torch.tensor([vision_grid_thw]).to(vf.device)
523
-
524
- print(f"πŸ” forward_projector - 이미지 {i} 처리 쀑")
525
- print(f"πŸ” forward_projector - 이미지 {i} νŠΉμ§• ν˜•νƒœ: {vf.shape}")
526
- print(f"πŸ” forward_projector - 이미지 {i} grid_thw: {grid_thw}")
527
-
528
  visual_embeds = self.abstractor(vf, grid_thw=grid_thw)["last_hidden_state"]
529
- print(f"πŸ” forward_projector - 이미지 {i} visual_embeds ν˜•νƒœ: {visual_embeds.shape}")
530
  visual_embeds_list.append(visual_embeds)
531
- return torch.cat(visual_embeds_list, dim=0) # μ΅œμ’…μ μœΌλ‘œ ν•˜λ‚˜μ˜ ν…μ„œλ‘œ ν•©μ³μ„œ λ°˜ν™˜
532
  else:
533
  # 단일 이미지
534
  print(f"πŸ” forward_projector - 단일 ν…μ„œ 처리")
@@ -737,9 +729,12 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
737
  if "image_token_thw" in single_image_metas:
738
  token_thw = single_image_metas["image_token_thw"]
739
  if isinstance(token_thw, (list, tuple)):
740
- tokens_per_image = token_thw[0] * token_thw[1] * token_thw[2]
 
 
 
741
  else:
742
- tokens_per_image = token_thw[0] * token_thw[1] * token_thw[2]
743
  print(f"πŸ” prepare_mm_inputs - 이미지 {i} μ‹€μ œ 토큰 수: {tokens_per_image}")
744
  else:
745
  # κΈ°λ³Έκ°’ μ‚¬μš©
@@ -833,6 +828,11 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
833
  # visual embeds와 -1 토큰 개수 확인 및 μ‘°μ •
834
  num_visual_tokens = flattened_visual_embeds.shape[0]
835
  num_neg_one_tokens = (flattened_input_ids == -1).sum().item()
 
 
 
 
 
836
  print(f"πŸ” prepare_mm_inputs - visual embeds 개수: {num_visual_tokens}")
837
  print(f"πŸ” prepare_mm_inputs - -1 토큰 개수: {num_neg_one_tokens}")
838
 
@@ -857,8 +857,9 @@ class KananaVForConditionalGeneration(KananaVPreTrainedModel):
857
  flattened_visual_embeds = repeated_embeds
858
  else:
859
  # visual embedsκ°€ λ„ˆλ¬΄ 적으면 첫 번째 토큰을 반볡
860
- first_token = flattened_visual_embeds[0:1].repeat(num_neg_one_tokens, 1)
861
- flattened_visual_embeds = first_token
 
862
 
863
  print(f"πŸ” prepare_mm_inputs - visual embeds 반볡: {num_visual_tokens} -> {num_neg_one_tokens}")
864
 
 
452
  )
453
  layer_index = self.config.projector_config.feature_layer_index
454
  visual_features_list.append(self._get_visual_feature_at(v_outputs.hidden_states, layer_index))
455
+ # κ²½λŸ‰ λ©€ν‹°λͺ¨λ‹¬: 첫 번째 κ²ƒλ§Œ μ‚¬μš©ν•˜λ˜, downstream이 단일 ν…μ„œλ₯Ό κΈ°λŒ€ν•˜λ―€λ‘œ ν…μ„œλ§Œ λ°˜ν™˜
456
+ return visual_features_list[0] if len(visual_features_list) > 0 else visual_features_list
457
  else:
458
  # 단일 이미지 - 이미 λΆ„λ¦¬λœ νŠΉμ§• ν…μ„œ
459
 
 
510
 
511
  # ✨ 핡심 μˆ˜μ •: visual_featuresκ°€ 리슀트일 경우 처리
512
  if isinstance(visual_features, list):
 
513
  visual_embeds_list = []
514
  for i, vf in enumerate(visual_features):
515
  single_image_metas = {k: v[i] for k, v in image_metas.items()}
 
516
  vision_grid_thw = single_image_metas["vision_grid_thw"]
517
  if isinstance(vision_grid_thw, (list, tuple)):
 
518
  grid_thw = torch.tensor([list(vision_grid_thw)]).to(vf.device)
519
  else:
520
  grid_thw = torch.tensor([vision_grid_thw]).to(vf.device)
 
 
 
 
 
521
  visual_embeds = self.abstractor(vf, grid_thw=grid_thw)["last_hidden_state"]
 
522
  visual_embeds_list.append(visual_embeds)
523
+ return torch.cat(visual_embeds_list, dim=0)
524
  else:
525
  # 단일 이미지
526
  print(f"πŸ” forward_projector - 단일 ν…μ„œ 처리")
 
729
  if "image_token_thw" in single_image_metas:
730
  token_thw = single_image_metas["image_token_thw"]
731
  if isinstance(token_thw, (list, tuple)):
732
+ tokens_per_image = int(token_thw[0]) * int(token_thw[1]) * int(token_thw[2])
733
+ elif hasattr(token_thw, 'tolist'):
734
+ tlist = token_thw.tolist()
735
+ tokens_per_image = int(tlist[0]) * int(tlist[1]) * int(tlist[2])
736
  else:
737
+ tokens_per_image = int(token_thw)
738
  print(f"πŸ” prepare_mm_inputs - 이미지 {i} μ‹€μ œ 토큰 수: {tokens_per_image}")
739
  else:
740
  # κΈ°λ³Έκ°’ μ‚¬μš©
 
828
  # visual embeds와 -1 토큰 개수 확인 및 μ‘°μ •
829
  num_visual_tokens = flattened_visual_embeds.shape[0]
830
  num_neg_one_tokens = (flattened_input_ids == -1).sum().item()
831
+ if num_neg_one_tokens == 0:
832
+ # -1 토큰이 μ—†μœΌλ©΄ λ¬Έμž₯ μ‹œμž‘λΆ€μ— μ‹œκ° 토큰을 κ°•μ œ μ‚½μž…ν•˜κΈ° μœ„ν•΄ κ°€μ§œ -1 토큰 ν•˜λ‚˜ μΆ”κ°€
833
+ fake_neg = torch.full_like(flattened_input_ids[:1], -1)
834
+ flattened_input_ids = torch.cat([fake_neg, flattened_input_ids], dim=0)
835
+ num_neg_one_tokens = 1
836
  print(f"πŸ” prepare_mm_inputs - visual embeds 개수: {num_visual_tokens}")
837
  print(f"πŸ” prepare_mm_inputs - -1 토큰 개수: {num_neg_one_tokens}")
838
 
 
857
  flattened_visual_embeds = repeated_embeds
858
  else:
859
  # visual embedsκ°€ λ„ˆλ¬΄ 적으면 첫 번째 토큰을 반볡
860
+ # μ΅œμ†Œ 1κ°œλΌλ„ μœ μ§€
861
+ base = flattened_visual_embeds[0:1]
862
+ flattened_visual_embeds = base.repeat(max(1, num_neg_one_tokens), 1)
863
 
864
  print(f"πŸ” prepare_mm_inputs - visual embeds 반볡: {num_visual_tokens} -> {num_neg_one_tokens}")
865
 
test_log.md CHANGED
@@ -154,6 +154,1376 @@ AttributeError: PreTrainedTokenizerFast has no attribute encode_prompt
154
 
155
 
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
 
159
 
 
154
 
155
 
156
 
157
+ -- float16
158
+
159
+
160
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
161
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
162
+
163
+ ==================================================
164
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
165
+ ==================================================
166
+ βœ… 성곡!
167
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'Hello! How can I assist you today? Are you looking for information, help with a task,'
168
+ ⏱️ 처리 μ‹œκ°„: 385.66초
169
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
170
+
171
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
172
+
173
+
174
+
175
+ -- float32
176
+
177
+
178
+
179
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
180
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
181
+
182
+ ==================================================
183
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
184
+ ==================================================
185
+ βœ… 성곡!
186
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
187
+ ⏱️ 처리 μ‹œκ°„: 155.17초
188
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
189
+
190
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
191
+
192
+ --
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+ -- float32
201
+
202
+
203
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
204
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
205
+
206
+ ==================================================
207
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
208
+ ==================================================
209
+ βœ… 성곡!
210
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
211
+ ⏱️ 처리 μ‹œκ°„: 91.52초
212
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
213
+
214
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
215
+
216
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
217
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
218
+
219
+ ==================================================
220
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
221
+ ==================================================
222
+ βœ… 성곡!
223
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
224
+ ⏱️ 처리 μ‹œκ°„: 92.82초
225
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
226
+
227
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
228
+
229
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
230
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
231
+
232
+ ==================================================
233
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
234
+ ==================================================
235
+ βœ… 성곡!
236
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
237
+ ⏱️ 처리 μ‹œκ°„: 89.43초
238
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
239
+
240
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
241
+
242
+
243
+
244
+ ---
245
+
246
+
247
+ INFO: Application startup complete.
248
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
249
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
250
+ 2025-08-09 21:04:03,978 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
251
+ 2025-08-09 21:04:03,978 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
252
+ ---
253
+ <|im_start|>user
254
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
255
+ <|im_start|>assistant
256
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
257
+ ---
258
+ 2025-08-09 21:04:03,978 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
259
+ 2025-08-09 21:04:03,978 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
260
+ 2025-08-09 21:04:03,978 - INFO - ⏱️ timing: tokenization=0.00s, generate=91.52s, decode=0.00s
261
+ 2025-08-09 21:04:03,978 - INFO - βœ… 생성 μ™„λ£Œ (91.52초), 이미지 처리: False
262
+ INFO: 127.0.0.1:53654 - "POST /generate HTTP/1.1" 200 OK
263
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
264
+ 2025-08-09 21:06:07,905 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
265
+ 2025-08-09 21:06:07,905 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
266
+ ---
267
+ <|im_start|>user
268
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
269
+ <|im_start|>assistant
270
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
271
+ ---
272
+ 2025-08-09 21:06:07,905 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
273
+ 2025-08-09 21:06:07,905 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
274
+ 2025-08-09 21:06:07,905 - INFO - ⏱️ timing: tokenization=0.00s, generate=92.82s, decode=0.00s
275
+ 2025-08-09 21:06:07,905 - INFO - βœ… 생성 μ™„λ£Œ (92.82초), 이미지 처리: False
276
+ INFO: 127.0.0.1:53751 - "POST /generate HTTP/1.1" 200 OK
277
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
278
+ 2025-08-09 21:07:44,244 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
279
+ 2025-08-09 21:07:44,244 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
280
+ ---
281
+ <|im_start|>user
282
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
283
+ <|im_start|>assistant
284
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
285
+ ---
286
+ 2025-08-09 21:07:44,244 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
287
+ 2025-08-09 21:07:44,244 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
288
+ 2025-08-09 21:07:44,244 - INFO - ⏱️ timing: tokenization=0.00s, generate=89.42s, decode=0.00s
289
+ 2025-08-09 21:07:44,247 - INFO - βœ… 생성 μ™„λ£Œ (89.43초), 이미지 처리: False
290
+ INFO: 127.0.0.1:53808 - "POST /generate HTTP/1.1" 200 OK
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+ -- float16
300
+
301
+
302
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
303
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
304
+
305
+ ==================================================
306
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
307
+ ==================================================
308
+ βœ… 성곡!
309
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
310
+ ⏱️ 처리 μ‹œκ°„: 92.64초
311
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
312
+
313
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
314
+
315
+
316
+ -- bfloat16
317
+
318
+
319
+
320
+
321
+
322
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
323
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
324
+
325
+ ==================================================
326
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
327
+ ==================================================
328
+ βœ… 성곡!
329
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
330
+ ⏱️ 처리 μ‹œκ°„: 91.47초
331
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
332
+
333
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
334
+
335
+
336
+
337
+ INFO: Application startup complete.
338
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
339
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
340
+ 2025-08-09 21:19:37,420 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
341
+ 2025-08-09 21:19:37,423 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
342
+ ---
343
+ <|im_start|>user
344
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
345
+ <|im_start|>assistant
346
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
347
+ ---
348
+ 2025-08-09 21:19:37,436 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
349
+ 2025-08-09 21:19:37,436 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
350
+ 2025-08-09 21:19:37,436 - INFO - ⏱️ timing: tokenization=0.00s, generate=91.44s, decode=0.02s
351
+ 2025-08-09 21:19:37,436 - INFO - βœ… 생성 μ™„λ£Œ (91.47초), 이미지 처리: False
352
+ INFO: 127.0.0.1:54835 - "POST /generate HTTP/1.1" 200 OK
353
+
354
+
355
+
356
+ -- bfloat16
357
+
358
+
359
+ INFO: Application startup complete.
360
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
361
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
362
+ 2025-08-09 21:24:40,234 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
363
+ 2025-08-09 21:24:40,234 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
364
+ ---
365
+ <|im_start|>user
366
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
367
+ <|im_start|>assistant
368
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
369
+ ---
370
+ 2025-08-09 21:24:40,234 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
371
+ 2025-08-09 21:24:40,234 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
372
+ 2025-08-09 21:24:40,234 - INFO - ⏱️ timing: tokenization=0.01s, generate=93.79s, decode=0.03s
373
+ 2025-08-09 21:24:40,234 - INFO - βœ… 생성 μ™„λ£Œ (93.83초), 이미지 처리: False
374
+ INFO: 127.0.0.1:55242 - "POST /generate HTTP/1.1" 200 OK
375
+
376
+
377
+
378
+ 025-08-09 21:27:07,944 - INFO - πŸ” DEBUG: λͺ¨λΈ λ‘œλ“œ μ‹œμž‘ - use_local=True
379
+ 2025-08-09 21:27:09,661 - INFO - πŸ” DEBUG: 둜컬 λͺ¨λΈ λ‘œλ“œ μ‹œλ„
380
+ 2025-08-09 21:27:09,661 - INFO - πŸ” DEBUG: selected_dtype = torch.bfloat16
381
+ 2025-08-09 21:27:09,679 - INFO - Build vision model ...
382
+ 2025-08-09 21:27:09,785 - INFO - Build projector ...
383
+ 2025-08-09 21:27:09,818 - INFO - Build language model ...
384
+ Loading checkpoint shards: 100%|β–ˆ| 2/2 [00:
385
+ 2025-08-09 21:27:10,835 - INFO - βœ… λͺ¨λΈ λ‘œλ“œ μ™„λ£Œ (KananaVForConditionalGeneration)
386
+ 2025-08-09 21:27:10,840 - INFO - πŸ“Š λͺ¨λΈ νŒŒλΌλ―Έν„° 수: 3,667,900,224
387
+ 2025-08-09 21:27:10,840 - INFO - πŸ”§ ν† ν¬λ‚˜μ΄μ € λ©€ν‹°λͺ¨λ‹¬ κΈ°λŠ₯ ν™œμ„±ν™”...
388
+ 2025-08-09 21:27:10,840 - INFO - 🏠 둜컬 ν™˜κ²½μ—μ„œ 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ”©
389
+ 2025-08-09 21:27:10,891 - INFO - βœ… 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ“œ 성곡!
390
+ 2025-08-09 21:27:10,891 - INFO - βœ… 'kanana-1.5-v-3b-instruct' λͺ¨λΈ λ‘œλ”© μ™„λ£Œ!
391
+ 2025-08-09 21:27:10,891 - INFO - βœ… μ„œλ²„κ°€ 'kanana-1.5-v-3b-instruct' λͺ¨λΈλ‘œ μ€€λΉ„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
392
+ INFO: Application startup complete.
393
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
394
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
395
+ 2025-08-09 21:29:02,746 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
396
+ 2025-08-09 21:29:02,754 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
397
+ ---
398
+ <|im_start|>user
399
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
400
+ <|im_start|>assistant
401
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
402
+ ---
403
+ 2025-08-09 21:29:02,755 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
404
+ 2025-08-09 21:29:02,755 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
405
+ 2025-08-09 21:29:02,756 - INFO - ⏱️ timing: tokenization=0.02s, generate=92.09s, decode=0.06s
406
+ 2025-08-09 21:29:02,763 - INFO - βœ… 생성 μ™„λ£Œ (92.17초), 이미지 처리: False
407
+ INFO: 127.0.0.1:55503 - "POST /generate HTTP/1.1" 200 OK
408
+
409
+
410
+
411
+ -- λ©€ν‹°λͺ¨λ‹¬ μ½”λ“œ λ‹€μ‹œ μΆ”κ°€ ν›„ test.py ν…μŠ€νŠΈ μ „μš© ν…ŒμŠ€νŠΈ
412
+
413
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
414
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
415
+
416
+ ==================================================
417
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
418
+ ==================================================
419
+ βœ… 성곡!
420
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
421
+ ⏱️ 처리 μ‹œκ°„: 121.37초
422
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
423
+
424
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
425
+
426
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>python test.py
427
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
428
+
429
+ ==================================================
430
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
431
+ ==================================================
432
+ βœ… 성곡!
433
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
434
+ ⏱️ 처리 μ‹œκ°„: 87.16초
435
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
436
+
437
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
438
+
439
+ ============================================================
440
+ πŸ€– Lily LLM API v2 - λͺ¨λΈ 선택
441
+ ============================================================
442
+ 1. Polyglot-ko-1.3b-chat (polyglot-ko-1.3b-chat)
443
+ 2. kanana-1.5-v-3b-instruct (kanana-1.5-v-3b-instruct)
444
+ 3. heegyu/polyglot-ko-5.8b-chat (polyglot-ko-5.8b-chat)
445
+
446
+ βœ… 'kanana-1.5-v-3b-instruct' λͺ¨λΈμ„ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.
447
+ 2025-08-09 21:38:48,387 - INFO - πŸ“₯ 'kanana-1.5-v-3b-instruct' λͺ¨λΈ λ‘œλ”© μ‹œμž‘...
448
+ 2025-08-09 21:38:48,387 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
449
+ 2025-08-09 21:38:48,388 - INFO - πŸ“₯ kanana-1.5-v-3b-instruct λͺ¨λΈ λ‘œλ“œ 쀑...
450
+ 2025-08-09 21:38:48,392 - WARNING - python-dotenv could not parse statement starting at line 35
451
+ 2025-08-09 21:38:48,396 - WARNING - python-dotenv could not parse statement starting at line 58
452
+ 2025-08-09 21:38:48,396 - WARNING - python-dotenv could not parse statement starting at line 61
453
+ 2025-08-09 21:38:48,398 - WARNING - python-dotenv could not parse statement starting at line 66
454
+ 2025-08-09 21:38:48,399 - INFO - βœ… ν™˜κ²½λ³€μˆ˜ λ‘œλ“œλ¨: .env
455
+ 2025-08-09 21:38:48,404 - INFO - πŸ—‚οΈ 둜컬 λͺ¨λΈ μ‚¬μš©: ./lily_llm_core/models/kanana_1_5_v_3b_instruct
456
+ 2025-08-09 21:38:48,404 - INFO - 🏠 둜컬 ν™˜κ²½ μ„€μ • 적용
457
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: model_path = ./lily_llm_core/models/kanana_1_5_v_3b_instruct
458
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: local_files_only = True
459
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: HF_TOKEN = 있음
460
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: use_local = True
461
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: is_local = True
462
+ 2025-08-09 21:38:48,404 - INFO - πŸ” DEBUG: ν† ν¬λ‚˜μ΄μ € λ‘œλ“œ μ‹œμž‘ - model_path=./lily_llm_core/models/kanana_1_5_v_3b_instruct
463
+ 2025-08-09 21:38:50,002 - INFO - βœ… ν† ν¬λ‚˜μ΄μ € λ‘œλ“œ μ™„λ£Œ (KananaVTokenizerFast)
464
+ 2025-08-09 21:38:50,004 - INFO - πŸ” DEBUG: λͺ¨λΈ λ‘œλ“œ μ‹œμž‘ - use_local=True
465
+ 2025-08-09 21:38:51,800 - INFO - πŸ” DEBUG: 둜컬 λͺ¨λΈ λ‘œλ“œ μ‹œλ„
466
+ 2025-08-09 21:38:51,800 - INFO - πŸ” DEBUG: selected_dtype = torch.float16
467
+ 2025-08-09 21:38:51,823 - INFO - Build vision model ...
468
+ 2025-08-09 21:38:51,900 - INFO - Build projector ...
469
+ 2025-08-09 21:38:51,982 - INFO - Build language model ...
470
+ Loading checkpoint shards: 100%|β–ˆ| 2/2 [00:
471
+ 2025-08-09 21:38:52,656 - INFO - βœ… λͺ¨λΈ λ‘œλ“œ μ™„λ£Œ (KananaVForConditionalGeneration)
472
+ 2025-08-09 21:38:52,661 - INFO - πŸ“Š λͺ¨λΈ νŒŒλΌλ―Έν„° 수: 3,667,900,224
473
+ 2025-08-09 21:38:52,661 - INFO - πŸ”§ ν† ν¬λ‚˜μ΄μ € λ©€ν‹°λͺ¨λ‹¬ κΈ°λŠ₯ ν™œμ„±ν™”...
474
+ 2025-08-09 21:38:52,661 - INFO - 🏠 둜컬 ν™˜κ²½μ—μ„œ 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ”©
475
+ 2025-08-09 21:38:52,695 - INFO - βœ… 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ“œ 성곡!
476
+ 2025-08-09 21:38:52,695 - INFO - βœ… 'kanana-1.5-v-3b-instruct' λͺ¨λΈ λ‘œλ”© μ™„λ£Œ!
477
+ 2025-08-09 21:38:52,695 - INFO - βœ… μ„œλ²„κ°€ 'kanana-1.5-v-3b-instruct' λͺ¨λΈλ‘œ μ€€λΉ„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
478
+ INFO: Application startup complete.
479
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
480
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
481
+ 2025-08-09 21:41:01,401 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
482
+ 2025-08-09 21:41:01,405 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
483
+ ---
484
+ <|im_start|>user
485
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
486
+ <|im_start|>assistant
487
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
488
+ ---
489
+ 2025-08-09 21:41:01,405 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
490
+ 2025-08-09 21:41:01,405 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
491
+ 2025-08-09 21:41:01,405 - INFO - ⏱️ timing: tokenization=0.02s, generate=121.32s, decode=0.03s
492
+ 2025-08-09 21:41:01,405 - INFO - βœ… 생성 μ™„λ£Œ (121.37초), 이미지 처리: False
493
+ INFO: 127.0.0.1:56369 - "POST /generate HTTP/1.1" 200 OK
494
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
495
+ 2025-08-09 21:43:34,368 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
496
+ 2025-08-09 21:43:34,368 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
497
+ ---
498
+ <|im_start|>user
499
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
500
+ <|im_start|>assistant
501
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
502
+ ---
503
+ 2025-08-09 21:43:34,368 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
504
+ 2025-08-09 21:43:34,368 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
505
+ 2025-08-09 21:43:34,368 - INFO - ⏱️ timing: tokenization=0.04s, generate=87.10s, decode=0.00s
506
+ 2025-08-09 21:43:34,368 - INFO - βœ… 생성 μ™„λ£Œ (87.16초), 이미지 처리: False
507
+ INFO: 127.0.0.1:56660 - "POST /generate HTTP/1.1" 200 OK
508
+
509
+
510
+ --
511
+
512
+
513
+
514
+
515
+ -- hearth chat μ±„νŒ…μ°½μ—μ„œ 이미지 1μž₯ μΆ”κ°€ ν›„ 전솑 ν…ŒμŠ€νŠΈ
516
+ -- !! ai κ°€ 이미지λ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•˜κ³  있음음
517
+
518
+ 2025-08-09 21:43:34,368 - INFO - ⏱️ timing: tokenization=0.04s, generate=87.10s, decode=0.00s
519
+ 2025-08-09 21:43:34,368 - INFO - βœ… 생성 μ™„λ£Œ (87.16초), 이미지 처리: False
520
+ INFO: 127.0.0.1:56660 - "POST /generate HTTP/1.1" 200 OK
521
+ 2025-08-09 21:45:27,814 - INFO - πŸ–ΌοΈ λ©€ν‹°λͺ¨λ‹¬(Lite) 처리 μ‹œμž‘... (원본 이미지 1개 β†’ 1개 μ‚¬μš©)
522
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
523
+ πŸ” prepare_mm_inputs - pixel_values 길이: 1
524
+ πŸ” prepare_mm_inputs - 단일 이미지 처리
525
+ πŸ” prepare_mm_inputs - 단일 이미지 처리, 첫 번째 이미지 정보 μ‚¬μš©
526
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([864, 1280])
527
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
528
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
529
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([864, 1280])
530
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 24, 36]])
531
+ πŸ” forward_projector - grid_thw κ³„μ‚°λœ 토큰 수: tensor([864])
532
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 864
533
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
534
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
535
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
536
+ πŸ” forward_projector - abstractor 좜λ ₯ ν˜•νƒœ: torch.Size([216, 2048])
537
+ πŸ” prepare_mm_inputs - visual embeds 개수: 216
538
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 0
539
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
540
+ πŸ” prepare_mm_inputs - visual embeds 자λ₯΄κΈ°: 216 -> 0
541
+ 2025-08-09 21:47:25,510 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
542
+ 2025-08-09 21:47:25,510 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
543
+ ---
544
+ 이미지λ₯Ό λΆ„μ„ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ΄λ―Έμ§€μ˜ λ‚΄μš©μ„ μ„€λͺ…ν•˜κ³ , 좔가적인 μ •λ³΄λ‚˜ 도움이 ν•„μš”ν•˜μ‹œλ©΄ λ§μ”€ν•΄μ£Όμ„Έμš”!
545
+ ---
546
+ 2025-08-09 21:47:25,510 - WARNING - ⚠️ κ²½κ³ : μ‘λ‹΅μ—μ„œ assistant 뢀뢄을 μ°Ύμ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 전체 ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
547
+ 2025-08-09 21:47:25,510 - INFO - μ΅œμ’… λ°˜ν™˜ ν…μŠ€νŠΈ: 이미지λ₯Ό λΆ„μ„ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ΄λ―Έμ§€μ˜ λ‚΄μš©μ„ μ„€λͺ…ν•˜κ³ , 좔가적인 μ •λ³΄λ‚˜ 도움이 ν•„μš”ν•˜μ‹œλ©΄ λ§μ”€ν•΄μ£Όμ„Έμš”!
548
+ 2025-08-09 21:47:25,510 - INFO - ⏱️ timing: tokenization=0.09s, generate=116.62s, decode=0.03s
549
+ 2025-08-09 21:47:25,525 - INFO - βœ… 생성 μ™„λ£Œ (117.71초), 이미지 처리: True
550
+ INFO: 127.0.0.1:56925 - "POST /generate HTTP/1.1" 200 OK
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+ --
562
+
563
+
564
+ 2025-08-09 22:03:59,917 - INFO - πŸ–ΌοΈ λ©€ν‹°λͺ¨λ‹¬(Lite) 처리 μ‹œμž‘... (원본 이미지 1개 β†’ 1개 μ‚¬μš©)
565
+ ⚠️ 이미지 0: image_token_thw μ—†μŒ
566
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
567
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
568
+ πŸ” prepare_mm_inputs - pixel_values 길이: 1
569
+ πŸ” prepare_mm_inputs - 단일 이미지 처리
570
+ πŸ” prepare_mm_inputs - 단일 이미지 처리, 첫 번째 이미지 정보 μ‚¬μš©
571
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([432, 1280])
572
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
573
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
574
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([432, 1280])
575
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 12, 36]])
576
+ πŸ” forward_projector - grid_thw κ³„μ‚°λœ 토큰 수: tensor([432])
577
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 432
578
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
579
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
580
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
581
+ πŸ” forward_projector - abstractor 좜λ ₯ ν˜•νƒœ: torch.Size([108, 2048])
582
+ πŸ” prepare_mm_inputs - visual embeds 개수: 108
583
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 1
584
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
585
+ πŸ” prepare_mm_inputs - visual embeds 자λ₯΄κΈ°: 108 -> 1
586
+ 2025-08-09 22:05:46,311 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
587
+ 2025-08-09 22:05:46,343 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
588
+ ---
589
+ 이미지 뢄석을 λ„μ™€λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! μ–΄λ–€ 이미지인지 μ„€λͺ…ν•΄ μ£Όμ‹œλ©΄ 더 ꡬ체적으둜 뢄석할 수 μžˆμ–΄μš”. 예λ₯Ό λ“€μ–΄, λ°°κ²½μ΄λ‚˜ μ£Όμš” 색상, νŠΉμ • 물건 등에 λŒ€ν•΄ μ•Œλ €μ£Όμ‹œλ©΄ μ’‹μŠ΅λ‹ˆλ‹€. 😊<|im_end|>
590
+ ---
591
+ 2025-08-09 22:05:46,343 - INFO - βœ… 성곡: νŒ¨ν„΄ 제거둜 응닡 정리
592
+ 2025-08-09 22:05:46,343 - INFO - μ •λ¦¬λœ 응닡: 이미지 뢄석을 λ„μ™€λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! μ–΄λ–€ 이미지인지 μ„€λͺ…ν•΄ μ£Όμ‹œλ©΄ 더 ꡬ체적으둜 뢄석할 수 μžˆμ–΄μš”. 예λ₯Ό λ“€μ–΄, λ°°κ²½μ΄λ‚˜ μ£Όμš” 색상, νŠΉμ • 물건 등에 λŒ€ν•΄ μ•Œλ €μ£Όμ‹œλ©΄ μ’‹μŠ΅λ‹ˆλ‹€. 😊
593
+ 2025-08-09 22:05:46,359 - INFO - ⏱️ timing: tokenization=0.03s, generate=106.17s, decode=0.15s
594
+ 2025-08-09 22:05:46,412 - INFO - βœ… 생성 μ™„λ£Œ (106.49초), 이미지 처리: True
595
+ INFO: 127.0.0.1:58704 - "POST /generate HTTP/1.1" 200 OK
596
+
597
+
598
+
599
+
600
+ ----
601
+
602
+
603
+
604
+
605
+
606
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>llts
607
+
608
+
609
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
610
+
611
+ ==================================================
612
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
613
+ ==================================================
614
+ βœ… 성곡!
615
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
616
+ ⏱️ 처리 μ‹œκ°„: 40.06초
617
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
618
+
619
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
620
+
621
+ ---
622
+
623
+
624
+ βœ… 'kanana-1.5-v-3b-instruct' λͺ¨λΈμ„ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.
625
+ 2025-08-09 22:13:08,249 - INFO - πŸ“₯ 'kanana-1.5-v-3b-instruct' λͺ¨λΈ λ‘œλ”© μ‹œμž‘...
626
+ 2025-08-09 22:13:08,249 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
627
+ 2025-08-09 22:13:08,249 - INFO - πŸ“₯ kanana-1.5-v-3b-instruct λͺ¨λΈ λ‘œλ“œ 쀑...
628
+ 2025-08-09 22:13:08,249 - WARNING - python-dotenv could not parse statement starting at line 35
629
+ 2025-08-09 22:13:08,249 - WARNING - python-dotenv could not parse statement starting at line 58
630
+ 2025-08-09 22:13:08,249 - WARNING - python-dotenv could not parse statement starting at line 61
631
+ 2025-08-09 22:13:08,249 - WARNING - python-dotenv could not parse statement starting at line 66
632
+ 2025-08-09 22:13:08,259 - INFO - βœ… ν™˜κ²½λ³€μˆ˜ λ‘œλ“œλ¨: .env
633
+ 2025-08-09 22:13:08,259 - INFO - πŸ—‚οΈ 둜컬 λͺ¨λΈ μ‚¬μš©: ./lily_llm_core/models/kanana_1_5_v_3b_instruct
634
+ 2025-08-09 22:13:08,260 - INFO - 🏠 둜컬 ν™˜κ²½ μ„€μ • 적용
635
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: model_path = ./lily_llm_core/models/kanana_1_5_v_3b_instruct
636
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: local_files_only = True
637
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: HF_TOKEN = 있음
638
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: use_local = True
639
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: is_local = True
640
+ 2025-08-09 22:13:08,260 - INFO - πŸ” DEBUG: ν† ν¬λ‚˜μ΄μ € λ‘œλ“œ μ‹œμž‘ - model_path=./lily_llm_core/models/kanana_1_5_v_3b_instruct
641
+ 2025-08-09 22:13:08,733 - INFO - βœ… ν† ν¬λ‚˜μ΄μ € λ‘œλ“œ μ™„λ£Œ (KananaVTokenizerFast)
642
+ 2025-08-09 22:13:08,733 - INFO - πŸ” DEBUG: λͺ¨λΈ λ‘œλ“œ μ‹œμž‘ - use_local=True
643
+ 2025-08-09 22:13:09,361 - INFO - πŸ” DEBUG: 둜컬 λͺ¨λΈ λ‘œλ“œ μ‹œλ„
644
+ 2025-08-09 22:13:09,361 - INFO - πŸ” DEBUG: selected_dtype = torch.float16
645
+ 2025-08-09 22:13:09,368 - INFO - Build vision model ...
646
+ 2025-08-09 22:13:09,393 - INFO - Build projector ...
647
+ 2025-08-09 22:13:09,403 - INFO - Build language model ...
648
+ Loading checkpoint shards: 100%|β–ˆ| 2
649
+ 2025-08-09 22:13:09,618 - INFO - βœ… λͺ¨λΈ λ‘œλ“œ μ™„λ£Œ (KananaVForConditionalGeneration)
650
+ 2025-08-09 22:13:09,621 - INFO - πŸ“Š λͺ¨λΈ νŒŒλΌλ―Έν„° 수: 3,667,900,224
651
+ 2025-08-09 22:13:09,621 - INFO - πŸ”§ ν† ν¬λ‚˜μ΄μ € λ©€ν‹°λͺ¨λ‹¬ κΈ°λŠ₯ ν™œμ„±ν™”...
652
+ 2025-08-09 22:13:09,621 - INFO - 🏠 둜컬 ν™˜κ²½μ—μ„œ 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ”©
653
+ 2025-08-09 22:13:09,639 - INFO - βœ… 이미지 ν”„λ‘œμ„Έμ„œ λ‘œλ“œ 성곡!
654
+ 2025-08-09 22:13:09,639 - INFO - βœ… 'kanana-1.5-v-3b-instruct' λͺ¨λΈ λ‘œλ”© μ™„λ£Œ!
655
+ 2025-08-09 22:13:09,639 - INFO - βœ… μ„œλ²„κ°€ 'kanana-1.5-v-3b-instruct' λͺ¨ 델둜 μ€€λΉ„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
656
+ INFO: Application startup complete.
657
+ INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
658
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
659
+ 2025-08-09 22:14:00,036 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
660
+ 2025-08-09 22:14:00,047 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
661
+ ---
662
+ <|im_start|>user
663
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
664
+ <|im_start|>assistant
665
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
666
+ ---
667
+ 2025-08-09 22:14:00,048 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
668
+ 2025-08-09 22:14:00,048 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄ κΉŒμš”?
669
+ 2025-08-09 22:14:00,048 - INFO - ⏱️ ttiming: tokenization=0.01s, generate=40.03s, decode=0.01s
670
+ 2025-08-09 22:14:00,049 - INFO - βœ… 생성 μ™„λ£Œ (40.06초), 이미지 처리: False
671
+ INFO: 127.0.0.1:59669 - "POST /generate HTTP/1.1" 200 OK
672
+
673
+
674
+
675
+ ---
676
+
677
+
678
+ ==================================================
679
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
680
+ ==================================================
681
+ βœ… 성곡!
682
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
683
+ ⏱️ 처리 μ‹œκ°„: 41.70초
684
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
685
+
686
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
687
+
688
+
689
+
690
+
691
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
692
+ 2025-08-09 22:19:54,138 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
693
+ 2025-08-09 22:19:54,141 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
694
+ ---
695
+ <|im_start|>user
696
+ μ•ˆλ…•ν•˜μ„Έμš”!<|im_end|>
697
+ <|im_start|>assistant
698
+ μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
699
+ ---
700
+ 2025-08-09 22:19:54,141 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
701
+ 2025-08-09 22:19:54,142 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•ν•˜μ„Έμš”! οΏ½οΏ½λ–»κ²Œ λ„μ™€λ“œλ¦΄ κΉŒμš”?
702
+ 2025-08-09 22:19:54,144 - INFO - ⏱️ ttiming: tokenization=0.05s, generate=41.62s, decode=0.02s
703
+ 2025-08-09 22:19:54,144 - INFO - βœ… 생성 μ™„λ£Œ (41.70초), 이미지 처리: False
704
+ INFO: 127.0.0.1:60350 - "POST /generate HTTP/1.1" 200 OK
705
+
706
+
707
+
708
+ -- 이미지 1개 첨뢀 ν›„ ν…ŒμŠ€νŠΈ
709
+
710
+ 2025-08-09 22:20:48,054 - INFO - πŸ–ΌοΈ λ©€ν‹°λͺ¨λ‹¬(Lite) 처리 μ‹œμž‘... (원본 이 λ―Έμ§€ 1개 β†’ 1개 μ‚¬μš©)
711
+ ⚠️ 이미지 0: image_token_thw μ—†μŒ
712
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
713
+ ⚠️ 이미지 1: image_token_thw μ—†μŒ
714
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
715
+ ⚠️ 이미지 2: image_token_thw μ—†μŒ
716
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
717
+ ⚠️ 이미지 3: image_token_thw μ—†μŒ
718
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
719
+ ⚠️ 이미지 4: image_token_thw μ—†μŒ
720
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
721
+ ⚠️ 이미지 5: image_token_thw μ—†μŒ
722
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
723
+ ⚠️ 이미지 6: image_token_thw μ—†μŒ
724
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
725
+ ⚠️ 이미지 7: image_token_thw μ—†μŒ
726
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
727
+ ⚠️ 이미지 8: image_token_thw μ—†μŒ
728
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
729
+ ⚠️ 이미지 9: image_token_thw μ—†μŒ
730
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
731
+ ⚠️ 이미지 10: image_token_thw μ—†μŒ
732
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
733
+ ⚠️ 이미지 11: image_token_thw μ—†μŒ
734
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
735
+ ⚠️ 이미지 12: image_token_thw μ—†μŒ
736
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
737
+ ⚠️ 이미지 13: image_token_thw μ—†μŒ
738
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
739
+ ⚠️ 이미지 14: image_token_thw μ—†μŒ
740
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
741
+ ⚠️ 이미지 15: image_token_thw μ—†μŒ
742
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
743
+ ⚠️ 이미지 16: image_token_thw μ—†μŒ
744
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
745
+ ⚠️ 이미지 17: image_token_thw μ—†μŒ
746
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
747
+ ⚠️ 이미지 18: image_token_thw μ—†μŒ
748
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
749
+ ⚠️ 이미지 19: image_token_thw μ—†μŒ
750
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
751
+ ⚠️ 이미지 20: image_token_thw μ—†μŒ
752
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
753
+ ⚠️ 이미지 21: image_token_thw μ—†μŒ
754
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
755
+ ⚠️ 이미지 22: image_token_thw μ—†μŒ
756
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
757
+ ⚠️ 이미지 23: image_token_thw μ—†μŒ
758
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
759
+ ⚠️ 이미지 24: image_token_thw μ—†μŒ
760
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
761
+ ⚠️ 이미지 25: image_token_thw μ—†μŒ
762
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
763
+ ⚠️ 이미지 26: image_token_thw μ—†μŒ
764
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
765
+ ⚠️ 이미지 27: image_token_thw μ—†μŒ
766
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
767
+ ⚠️ 이미지 28: image_token_thw μ—†μŒ
768
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
769
+ ⚠️ 이미지 29: image_token_thw μ—†μŒ
770
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
771
+ ⚠️ 이미지 30: image_token_thw μ—†μŒ
772
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
773
+ ⚠️ 이미지 31: image_token_thw μ—†μŒ
774
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
775
+ ⚠️ 이미지 32: image_token_thw μ—†μŒ
776
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
777
+ ⚠️ 이미지 33: image_token_thw μ—†μŒ
778
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
779
+ ⚠️ 이미지 34: image_token_thw μ—†μŒ
780
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
781
+ ⚠️ 이미지 35: image_token_thw μ—†μŒ
782
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
783
+ ⚠️ 이미지 36: image_token_thw μ—†μŒ
784
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
785
+ ⚠️ 이미지 37: image_token_thw μ—†μŒ
786
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
787
+ ⚠️ 이미지 38: image_token_thw μ—†μŒ
788
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
789
+ ⚠️ 이미지 39: image_token_thw μ—†μŒ
790
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
791
+ ⚠️ 이미지 40: image_token_thw μ—†μŒ
792
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
793
+ ⚠️ 이미지 41: image_token_thw μ—†μŒ
794
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
795
+ ⚠️ 이미지 42: image_token_thw μ—†μŒ
796
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
797
+ ⚠️ 이미지 43: image_token_thw μ—†μŒ
798
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
799
+ ⚠️ 이미지 44: image_token_thw μ—†μŒ
800
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
801
+ ⚠️ 이미지 45: image_token_thw μ—†μŒ
802
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
803
+ ⚠️ 이미지 46: image_token_thw μ—†μŒ
804
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
805
+ ⚠️ 이미지 47: image_token_thw μ—†μŒ
806
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
807
+ ⚠️ 이미지 48: image_token_thw μ—†μŒ
808
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
809
+ ⚠️ 이미지 49: image_token_thw μ—†μŒ
810
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
811
+ ⚠️ 이미지 50: image_token_thw μ—†μŒ
812
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
813
+ ⚠️ 이미지 51: image_token_thw μ—†μŒ
814
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
815
+ ⚠️ 이미지 52: image_token_thw μ—†μŒ
816
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
817
+ ⚠️ 이미지 53: image_token_thw μ—†μŒ
818
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
819
+ ⚠️ 이미지 54: image_token_thw μ—†μŒ
820
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
821
+ ⚠️ 이미지 55: image_token_thw μ—†μŒ
822
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
823
+ ⚠️ 이미지 56: image_token_thw μ—†μŒ
824
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
825
+ ⚠️ 이미지 57: image_token_thw μ—†μŒ
826
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
827
+ ⚠️ 이미지 58: image_token_thw μ—†μŒ
828
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
829
+ ⚠️ 이미지 59: image_token_thw μ—†μŒ
830
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
831
+ ⚠️ 이미지 60: image_token_thw μ—†μŒ
832
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
833
+ ⚠️ 이미지 61: image_token_thw μ—†μŒ
834
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
835
+ ⚠️ 이미지 62: image_token_thw μ—†μŒ
836
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
837
+ ⚠️ 이미지 63: image_token_thw μ—†μŒ
838
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
839
+ ⚠️ 이미지 64: image_token_thw μ—†μŒ
840
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
841
+ ⚠️ 이미지 65: image_token_thw μ—†μŒ
842
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
843
+ ⚠️ 이미지 66: image_token_thw μ—†μŒ
844
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
845
+ ⚠️ 이미지 67: image_token_thw μ—†μŒ
846
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
847
+ ⚠️ 이미지 68: image_token_thw μ—†μŒ
848
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
849
+ ⚠️ 이미지 69: image_token_thw μ—†μŒ
850
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
851
+ ⚠️ 이미지 70: image_token_thw μ—†μŒ
852
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
853
+ ⚠️ 이미지 71: image_token_thw μ—†μŒ
854
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
855
+ ⚠️ 이미지 72: image_token_thw μ—†μŒ
856
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
857
+ ⚠️ 이미지 73: image_token_thw μ—†μŒ
858
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
859
+ ⚠️ 이미지 74: image_token_thw μ—†μŒ
860
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
861
+ ⚠️ 이미지 75: image_token_thw μ—†μŒ
862
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
863
+ ⚠️ 이미지 76: image_token_thw μ—†μŒ
864
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
865
+ ⚠️ 이미지 77: image_token_thw μ—†μŒ
866
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
867
+ ⚠️ 이미지 78: image_token_thw μ—†μŒ
868
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
869
+ ⚠️ 이미지 79: image_token_thw μ—†μŒ
870
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
871
+ ⚠️ 이미지 80: image_token_thw μ—†μŒ
872
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
873
+ ⚠️ 이미지 81: image_token_thw μ—†μŒ
874
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
875
+ ⚠️ 이미지 82: image_token_thw μ—†μŒ
876
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
877
+ ⚠️ 이미지 83: image_token_thw μ—†μŒ
878
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
879
+ ⚠️ 이미지 84: image_token_thw μ—†μŒ
880
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
881
+ ⚠️ 이미지 85: image_token_thw μ—†μŒ
882
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
883
+ ⚠️ 이미지 86: image_token_thw μ—†μŒ
884
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
885
+ ⚠️ 이미지 87: image_token_thw μ—†μŒ
886
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
887
+ ⚠️ 이미지 88: image_token_thw μ—†μŒ
888
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
889
+ ⚠️ 이미지 89: image_token_thw μ—†μŒ
890
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
891
+ ⚠️ 이미지 90: image_token_thw μ—†μŒ
892
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
893
+ ⚠️ 이미지 91: image_token_thw μ—†μŒ
894
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
895
+ ⚠️ 이미지 92: image_token_thw μ—†μŒ
896
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
897
+ ⚠️ 이미지 93: image_token_thw μ—†μŒ
898
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
899
+ ⚠️ 이미지 94: image_token_thw μ—†μŒ
900
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
901
+ ⚠️ 이미지 95: image_token_thw μ—†μŒ
902
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
903
+ ⚠️ 이미지 96: image_token_thw μ—†μŒ
904
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
905
+ ⚠️ 이미지 97: image_token_thw μ—†μŒ
906
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
907
+ ⚠️ 이미지 98: image_token_thw μ—†μŒ
908
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
909
+ ⚠️ 이미지 99: image_token_thw μ—†μŒ
910
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
911
+ ⚠️ 이미지 100: image_token_thw μ—†μŒ
912
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
913
+ ⚠️ 이미지 101: image_token_thw μ—†μŒ
914
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
915
+ ⚠️ 이미지 102: image_token_thw μ—†μŒ
916
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
917
+ ⚠️ 이미지 103: image_token_thw μ—†μŒ
918
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
919
+ ⚠️ 이미지 104: image_token_thw μ—†μŒ
920
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
921
+ ⚠️ 이미지 105: image_token_thw μ—†μŒ
922
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
923
+ ⚠️ 이미지 106: image_token_thw μ—†μŒ
924
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
925
+ ⚠️ 이미지 107: image_token_thw μ—†μŒ
926
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
927
+ ⚠️ 이미지 108: image_token_thw μ—†μŒ
928
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
929
+ ⚠️ 이미지 109: image_token_thw μ—†μŒ
930
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
931
+ ⚠️ 이미지 110: image_token_thw μ—†μŒ
932
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
933
+ ⚠️ 이미지 111: image_token_thw μ—†μŒ
934
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
935
+ ⚠️ 이미지 112: image_token_thw μ—†μŒ
936
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
937
+ ⚠️ 이미지 113: image_token_thw μ—†μŒ
938
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
939
+ ⚠️ 이미지 114: image_token_thw μ—†μŒ
940
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
941
+ ⚠️ 이미지 115: image_token_thw μ—†μŒ
942
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
943
+ ⚠️ 이미지 116: image_token_thw μ—†μŒ
944
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
945
+ ⚠️ 이미지 117: image_token_thw μ—†μŒ
946
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
947
+ ⚠️ 이미지 118: image_token_thw μ—†μŒ
948
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
949
+ ⚠️ 이미지 119: image_token_thw μ—†μŒ
950
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
951
+ ⚠️ 이미지 120: image_token_thw μ—†μŒ
952
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
953
+ ⚠️ 이미지 121: image_token_thw μ—†μŒ
954
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
955
+ ⚠️ 이미지 122: image_token_thw μ—†μŒ
956
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
957
+ ⚠️ 이미지 123: image_token_thw μ—†μŒ
958
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
959
+ ⚠️ 이미지 124: image_token_thw μ—†μŒ
960
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
961
+ ⚠️ 이미지 125: image_token_thw μ—†μŒ
962
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
963
+ ⚠️ 이미지 126: image_token_thw μ—†μŒ
964
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
965
+ ⚠️ 이미지 127: image_token_thw μ—†μŒ
966
+ πŸ” repeat_image_tokens 호좜: hw_tokens = None
967
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
968
+ πŸ” prepare_mm_inputs - pixel_values 길이: 1
969
+ πŸ” prepare_mm_inputs - 단일 이미지 처리
970
+ πŸ” prepare_mm_inputs - 단일 이미지 처리, 첫 번째 이미지 정보 μ‚¬μš©
971
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([864, 1280])
972
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
973
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
974
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([864, 1280])
975
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 24, 36]])
976
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([864])
977
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 864
978
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
979
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
980
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
981
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([216, 2048])
982
+ πŸ” prepare_mm_inputs - visual embeds 개수: 216
983
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 128
984
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
985
+ πŸ” prepare_mm_inputs - visual embeds 자λ₯΄κΈ°: 216 -> 128
986
+ 2025-08-09 22:22:31,156 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
987
+ 2025-08-09 22:22:31,156 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
988
+ ---
989
+ 이 μ΄λ―Έμ§€λŠ” Copilotμ΄λΌλŠ” μ΄λ¦„μ˜ 둜고λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. λ‘œκ³ λŠ” λ‹€μ±„λ‘œμš΄ μƒ‰μƒμ˜ κ³‘μ„ μœΌλ‘œ 이루어진 λ””μžμΈκ³Ό "Copilot"μ΄λΌλŠ” ν…μŠ€νŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 배경은 κ·ΈλΌλ°μ΄μ…˜ νš¨κ³Όκ°€ 적용된 λΆ€λ“œλŸ¬ 운 녹색 톀
990
+ ---
991
+ 2025-08-09 22:22:31,156 - WARNING - ⚠️ κ²½κ³ : μ‘λ‹΅μ—μ„œ assistant 뢀뢄을 μ°Ύ μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 전체 ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
992
+ 2025-08-09 22:22:31,156 - INFO - μ΅œμ’… λ°˜ν™˜ ν…μŠ€νŠΈ: 이 μ΄λ―Έμ§€λŠ” Copilotμ΄λΌλŠ” μ΄λ¦„μ˜ 둜고λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. λ‘œκ³ λŠ” λ‹€μ±„λ‘œμš΄ μƒ‰μƒμ˜ κ³‘μ„ μœΌλ‘œ 이루어진 λ”” 자인과 "Copilot"μ΄λΌλŠ” ν…μŠ€νŠΈλ‘œ ꡬ성 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 배경은 κ·ΈλΌλ°μ΄μ…˜ νš¨κ³Όκ°€ 적용된 λΆ€λ“œλŸ¬μš΄ 녹색 톀
993
+ 2025-08-09 22:22:31,156 - INFO - ⏱️ ttiming: tokenization=0.12s, generate=102.51s, decode=0.07s
994
+ 2025-08-09 22:22:31,165 - INFO - βœ… 생성 μ™„λ£Œ (103.11초), 이미지 처리: True
995
+ INFO: 127.0.0.1:60421 - "POST /generate HTTP/1.1" 200 OK
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+ -- 닀쀑 이미지
1020
+
1021
+
1022
+ ⚠️ 이미지 254: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1023
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1024
+ ⚠️ 이미지 255: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1025
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1026
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
1027
+ πŸ” prepare_mm_inputs - pixel_values 길이: 2
1028
+ πŸ” prepare_mm_inputs - 닀쀑 이미지 처리 μ‹œμž‘
1029
+ πŸ” prepare_mm_inputs - 이미지 0 처리 쀑
1030
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([864, 1280])
1031
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1032
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1033
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([864, 1280])
1034
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 24, 36]])
1035
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([864])
1036
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 864
1037
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1038
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
1039
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
1040
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([216, 2048])
1041
+ πŸ” prepare_mm_inputs - 이미지 1 처리 쀑
1042
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([504, 1280])
1043
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1044
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1045
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([504, 1280])
1046
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 14, 36]])
1047
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([504])
1048
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 504
1049
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1050
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 14, 36, 1280])
1051
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 14, 36, 1280])
1052
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([126, 2048])
1053
+ πŸ” prepare_mm_inputs - 닀쀑 이미지 처리 μ™„λ£Œ, μ—°κ²°λœ embeds 크기: torch.Size([342, 2048])
1054
+ πŸ” prepare_mm_inputs - visual embeds 개수: 342
1055
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 596
1056
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
1057
+ πŸ” prepare_mm_inputs - visual embeds 반볡: 342 -> 596
1058
+ 2025-08-09 22:41:20,783 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1059
+ 2025-08-09 22:41:20,783 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1060
+ ---
1061
+ 이미지 2개λ₯Ό λΉ„κ΅ν•˜λ €λ©΄, 각 이미지λ₯Ό μ—…λ‘œλ“œν•΄ μ£Όμ‹œκ±°λ‚˜ URL을 μ œκ³΅ν•΄ μ£Όμ„Έμš”. 그런 λ‹€μŒ, μ΄λ―Έμ§€μ˜ μ£Όμš” νŠΉμ§•μ΄λ‚˜ 차이λ₯Ό λΆ„μ„ν•˜μ—¬ 비ꡐ해 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! 😊
1062
+ ---
1063
+ 2025-08-09 22:41:20,783 - WARNING - ⚠️ κ²½κ³ : μ‘λ‹΅μ—μ„œ assistant 뢀뢄을 μ°Ύ μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 전체 ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
1064
+ 2025-08-09 22:41:20,783 - INFO - μ΅œμ’… λ°˜ν™˜ ν…μŠ€νŠΈ: 이미지 2개λ₯Ό λΉ„κ΅ν•˜λ €λ©΄, 각 이미지λ₯Ό μ—…λ‘œλ“œν•΄ μ£Όμ‹œκ±°λ‚˜ URL을 μ œκ³΅ν•΄ μ£Όμ„Έμš”. 그런 λ‹€μŒ, μ΄λ―Έμ§€μ˜ μ£Όμš” νŠΉμ§•μ΄λ‚˜ 차이λ₯Ό λΆ„μ„ν•˜μ—¬ 비ꡐ해 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! 😊
1065
+ 2025-08-09 22:41:20,783 - INFO - ⏱️ ttiming: tokenization=0.16s, generate=196.47s, decode=0.03s
1066
+ 2025-08-09 22:41:20,783 - INFO - βœ… 생성 μ™„λ£Œ (197.07초), 이미지 처리: True
1067
+ INFO: 127.0.0.1:62019 - "POST /generate HTTP/1.1" 200 OK
1068
+
1069
+
1070
+
1071
+
1072
+ ⚠️ 이미지 127: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1073
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1074
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
1075
+ πŸ” prepare_mm_inputs - pixel_values 길이: 1
1076
+ πŸ” prepare_mm_inputs - 단일 이미지 처리
1077
+ πŸ” prepare_mm_inputs - 단일 이미지 처리, 첫 번째 이미지 정보 μ‚¬μš©
1078
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([432, 1280])
1079
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1080
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1081
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([432, 1280])
1082
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 12, 36]])
1083
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([432])
1084
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 432
1085
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1086
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
1087
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
1088
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([108, 2048])
1089
+ πŸ” prepare_mm_inputs - visual embeds 개수: 108
1090
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 235
1091
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
1092
+ πŸ” prepare_mm_inputs - visual embeds 반볡: 108 -> 235
1093
+ 2025-08-09 22:44:36,804 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1094
+ 2025-08-09 22:44:36,804 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1095
+ ---
1096
+ 이미지λ₯Ό λΆ„μ„ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
1097
+
1098
+ λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1099
+ 1. \( \sqrt{24} \times 2^{3/3} \)의 값을 κ΅¬ν•˜μ‹œμ˜€.
1100
+ μ„ νƒμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1101
+ β‘  6
1102
+ β‘‘ 7
1103
+ β‘’ 8
1104
+ β‘£ 9
1105
+ β‘€
1106
+ ---
1107
+ 2025-08-09 22:44:36,804 - INFO - βœ… 성곡: νŒ¨ν„΄ 제거둜 응닡 정리
1108
+ 2025-08-09 22:44:36,804 - INFO - μ •λ¦¬λœ 응닡: 이미지λ₯Ό λΆ„μ„ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
1109
+
1110
+ λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1111
+ 1. \( \sqrt{24} \times 2^{3/3} \)의 값을 κ΅¬ν•˜μ‹œμ˜€.
1112
+ μ„ νƒμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1113
+ β‘  6
1114
+ β‘‘ 7
1115
+ β‘’ 8
1116
+ β‘£ 9
1117
+ β‘€
1118
+ 2025-08-09 22:44:36,804 - INFO - ⏱️ ttiming: tokenization=0.06s, generate=87.62s, decode=0.02s
1119
+ 2025-08-09 22:44:36,819 - INFO - βœ… 생성 μ™„λ£Œ (87.75초), 이미지 처리: True
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+ -- test.py ν…ŒμŠ€νŠΈ 파일 λ‹¨μˆœ ν…μŠ€νŠΈ 처리 33초
1126
+
1127
+
1128
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>llts
1129
+
1130
+
1131
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
1132
+
1133
+ ==================================================
1134
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
1135
+ ==================================================
1136
+ βœ… 성곡!
1137
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
1138
+ ⏱️ 처리 μ‹œκ°„: 33.29초
1139
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
1140
+
1141
+ βœ… ν…ŒμŠ€νŠΈ μ™„λ£Œ!
1142
+
1143
+
1144
+ (lily_llm_env) C:\Project\lily_generate_project\lily_generate_package>llts
1145
+
1146
+
1147
+ πŸ§ͺ Lily LLM API ν…ŒμŠ€νŠΈ μ‹œμž‘
1148
+
1149
+ ==================================================
1150
+ ν…ŒμŠ€νŠΈ 1: μ•ˆλ…•ν•˜μ„Έμš”!
1151
+ ==================================================
1152
+ βœ… 성곡!
1153
+ πŸ“ μƒμ„±λœ ν…μŠ€νŠΈ: 'μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?'
1154
+ ⏱️ 처리 μ‹œκ°„: 35.61초
1155
+ πŸ€– λͺ¨λΈ: kanana-1.5-v-3b-instruct
1156
+
1157
+
1158
+
1159
+ -- hearth chat μ±„νŒ…μ°½ λ‹¨μˆœ ν…μŠ€νŠΈ 전솑 응닡 처리 μ‹œκ°„ 621 초
1160
+
1161
+
1162
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
1163
+ 2025-08-09 23:42:25,991 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
1164
+ INFO: 127.0.0.1:65335 - "GET /models HTTP/1.1" 200 OK
1165
+ 2025-08-09 23:42:31,446 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
1166
+ INFO: 127.0.0.1:65336 - "GET /models HTTP/1.1" 200 OK
1167
+ 2025-08-09 23:45:21,072 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1168
+ 2025-08-09 23:45:21,074 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1169
+ ---
1170
+ <|im_start|>user
1171
+ νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.
1172
+
1173
+ μ‚¬μš©μž λ©”μ‹œμ§€: λ„€ 이름은 λ­λ‹ˆ?<|im_end|>
1174
+ <|im_start|>assistant
1175
+ μ•ˆλ…•! λ‚˜λŠ” AI λ„μš°λ―Έμ•Ό. λ„ˆμ˜ μ§ˆλ¬Έμ΄λ‚˜ κΆκΈˆμ¦μ„ ν•΄κ²°ν•΄μ£ΌλŠ” κ±Έ μ’‹μ•„ν•˜μ§€. 이 름이 뭐라고 λ¬Όμ–΄λ΄€λŠ”λ°, ν˜Ήμ‹œ λ‹€λ₯Έ 것 도 κΆκΈˆν•œ 게 있으면 μ–Έμ œλ“  λ§ν•΄μ€˜! 😊
1176
+ ---
1177
+ 2025-08-09 23:45:21,074 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
1178
+ 2025-08-09 23:45:21,074 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•! λ‚˜λŠ” AI λ„μš°λ―Έμ•Ό. λ„ˆμ˜ μ§ˆλ¬Έμ΄λ‚˜ κΆκΈˆμ¦μ„ ν•΄κ²°ν•΄μ£ΌλŠ” κ±Έ μ’‹μ•„ν•˜μ§€. 이름이 뭐라고 λ¬Όμ–΄λ΄€λŠ”λ°, ν˜Ήμ‹œ λ‹€λ₯Έ 것도 κΆκΈˆν•œ 게 있으면 μ–Έμ œλ“  말 ν•΄μ€˜! 😊
1179
+ 2025-08-09 23:45:21,074 - INFO - ⏱️ ttiming: tokenization=0.10s, generate=621.18s, decode=0.05s
1180
+ 2025-08-09 23:45:21,074 - INFO - βœ… 생성 μ™„λ£Œ (621.35초), 이미지 처리: False
1181
+ INFO: 127.0.0.1:64965 - "POST /generate HTTP/1.1" 200 OK
1182
+
1183
+
1184
+
1185
+ -- hearth chat μ±„νŒ…μ°½ 닀쀑 이미지 전솑 응닡 처리 μ‹œκ°„ 340초
1186
+
1187
+ ⚠️ 이미지 391: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1188
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1189
+ ⚠️ 이미지 392: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1190
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1191
+ ⚠️ 이미지 393: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1192
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1193
+ ⚠️ 이미지 394: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1194
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1195
+ ⚠️ 이미지 395: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1196
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1197
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
1198
+ πŸ” prepare_mm_inputs - pixel_values 길이: 2
1199
+ πŸ” prepare_mm_inputs - 닀쀑 이미지 처리 μ‹œμž‘
1200
+ πŸ” prepare_mm_inputs - 이미지 0 처리 쀑
1201
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([864, 1280])
1202
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1203
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1204
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([864, 1280])
1205
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 24, 36]])
1206
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([864])
1207
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 864
1208
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1209
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
1210
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 24, 36, 1280])
1211
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([216, 2048])
1212
+ πŸ” prepare_mm_inputs - 이미지 1 처리 쀑
1213
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([720, 1280])
1214
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1215
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1216
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([720, 1280])
1217
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 20, 36]])
1218
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([720])
1219
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 720
1220
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1221
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 20, 36, 1280])
1222
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 20, 36, 1280])
1223
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([180, 2048])
1224
+ πŸ” prepare_mm_inputs - 닀쀑 이미지 처리 μ™„λ£Œ, μ—°κ²°λœ embeds 크기: torch.Size([396, 2048])
1225
+ πŸ” prepare_mm_inputs - visual embeds 개수: 396
1226
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 790
1227
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
1228
+ πŸ” prepare_mm_inputs - visual embeds 반볡: 396 -> 790
1229
+ 2025-08-09 23:31:57,282 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1230
+ 2025-08-09 23:31:57,303 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1231
+ ---
1232
+ 이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 보겠슡 λ‹ˆλ‹€.
1233
+
1234
+ 첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.
1235
+ 두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μž κ°€ 있으며, "i" μœ„μ— μž‘μ€ 별 λͺ¨μ–‘μ˜ λ””ν…ŒμΌμ΄ μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
1236
+
1237
+ 도움이 ν•„μš”
1238
+ ---
1239
+ 2025-08-09 23:31:57,306 - WARNING - ⚠️ κ²½κ³ : μ‘λ‹΅μ—μ„œ assistant 뢀뢄을 μ°Ύ μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 전체 ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
1240
+ 2025-08-09 23:31:57,307 - INFO - μ΅œμ’… λ°˜ν™˜ ν…μŠ€νŠΈ: 이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.
1241
+
1242
+ 첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.
1243
+ 두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μž κ°€ 있으며, "i" μœ„μ— μž‘μ€ 별 λͺ¨μ–‘μ˜ λ””ν…ŒμΌμ΄ μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
1244
+
1245
+ 도움이 ν•„μš”
1246
+ 2025-08-09 23:31:57,309 - INFO - ⏱️ ttiming: tokenization=0.12s, generate=339.63s, decode=0.10s
1247
+ 2025-08-09 23:31:57,337 - INFO - βœ… 생성 μ™„λ£Œ (340.07초), 이미지 처리: True
1248
+ INFO: 127.0.0.1:64121 - "POST /generate HTTP/1.1" 200 OK
1249
+ The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
1250
+ 2025-08-09 23:42:25,991 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
1251
+ INFO: 127.0.0.1:65335 - "GET /models HTTP/1.1" 200 OK
1252
+ 2025-08-09 23:42:31,446 - INFO - πŸ” ν™˜κ²½ 감지: 둜컬
1253
+ INFO: 127.0.0.1:65336 - "GET /models HTTP/1.1" 200 OK
1254
+ 2025-08-09 23:45:21,072 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1255
+ 2025-08-09 23:45:21,074 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1256
+ ---
1257
+ <|im_start|>user
1258
+ νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.
1259
+
1260
+ μ‚¬μš©μž λ©”μ‹œμ§€: λ„€ 이름은 λ­λ‹ˆ?<|im_end|>
1261
+ <|im_start|>assistant
1262
+ μ•ˆλ…•! λ‚˜λŠ” AI λ„μš°λ―Έμ•Ό. λ„ˆμ˜ μ§ˆλ¬Έμ΄λ‚˜ κΆκΈˆμ¦μ„ ν•΄κ²°ν•΄μ£ΌλŠ” κ±Έ μ’‹μ•„ν•˜μ§€. 이 름이 뭐라고 λ¬Όμ–΄λ΄€λŠ”λ°, ν˜Ήμ‹œ λ‹€λ₯Έ 것 도 κΆκΈˆν•œ 게 있으면 μ–Έμ œλ“  λ§ν•΄μ€˜! 😊
1263
+ ---
1264
+ 2025-08-09 23:45:21,074 - INFO - βœ… 성곡: ν”„λ‘¬ν”„νŠΈ 제거둜 응닡 μΆ”μΆœ
1265
+ 2025-08-09 23:45:21,074 - INFO - μΆ”μΆœλœ 응닡: μ•ˆλ…•! λ‚˜λŠ” AI λ„μš°λ―Έμ•Ό. λ„ˆμ˜ μ§ˆλ¬Έμ΄λ‚˜ κΆκΈˆμ¦μ„ ν•΄κ²°ν•΄μ£ΌλŠ” κ±Έ μ’‹μ•„ν•˜μ§€. 이름이 뭐라고 λ¬Όμ–΄λ΄€λŠ”λ°, ν˜Ήμ‹œ λ‹€λ₯Έ 것도 κΆκΈˆν•œ 게 있으면 μ–Έμ œλ“  말 ν•΄μ€˜! 😊
1266
+ 2025-08-09 23:45:21,074 - INFO - ⏱️ ttiming: tokenization=0.10s, generate=621.18s, decode=0.05s
1267
+ 2025-08-09 23:45:21,074 - INFO - βœ… 생성 μ™„λ£Œ (621.35초), 이미지 처리: False
1268
+ INFO: 127.0.0.1:64965 - "POST /generate HTTP/1.1" 200 OK
1269
+
1270
+
1271
+
1272
+ -- hearth chat 1개 이미지 전솑 처리 84초
1273
+
1274
+ 이미지 107: 인덱슀 λ²”μœ„ 초과, κΈ° λ³Έκ°’ μ‚¬μš©
1275
+ πŸ” repeat_image_tokens 호좜: hw_tokens = (1, 1, 1)
1276
+ πŸ” prepare_mm_inputs - pixel_values νƒ€μž…: <class 'list'>
1277
+ πŸ” prepare_mm_inputs - pixel_values 길이: 1
1278
+ πŸ” prepare_mm_inputs - 단일 이미지 처리
1279
+ πŸ” prepare_mm_inputs - 단일 이미지 처리, 첫 번째 이미지 정보 μ‚¬μš©
1280
+ πŸ” forward_projector - visual_features ν˜•νƒœ: torch.Size([432, 1280])
1281
+ πŸ” forward_projector - 단일 ν…μ„œ 처리
1282
+ πŸ” forward_projector - 이미 처리된 νŠΉμ§• ν…μ„œ 감지
1283
+ πŸ” forward_projector - νŠΉμ§• ν…μ„œ ν˜•νƒœ: torch.Size([432, 1280])
1284
+ πŸ” forward_projector - grid_thw: tensor([[ 1, 12, 36]])
1285
+ πŸ” forward_projector - grid_thw 계산 된 토큰 수: tensor([432])
1286
+ πŸ” forward_projector - μ‹€μ œ νŠΉμ§• ν…μ„œ 토큰 수: 432
1287
+ πŸ” abstractor - pos_emb ν˜•νƒœ: torch.Size([1, 576, 1280])
1288
+ πŸ” abstractor - reshaped_visual_embeds ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
1289
+ πŸ” abstractor - _local_pos_emb ν˜•νƒœ: torch.Size([1, 12, 36, 1280])
1290
+ πŸ” forward_projector - abstractor 좜 λ ₯ ν˜•νƒœ: torch.Size([108, 2048])
1291
+ πŸ” prepare_mm_inputs - visual embeds 개수: 108
1292
+ πŸ” prepare_mm_inputs - -1 토큰 개수: 215
1293
+ πŸ” prepare_mm_inputs - 토큰 개수 뢈일치, μ‘°μ • ν•„μš”
1294
+ πŸ” prepare_mm_inputs - visual embeds 반볡: 108 -> 215
1295
+ 2025-08-09 23:51:06,912 - INFO - --- 응닡 μΆ”μΆœ μ‹œμž‘ ---
1296
+ 2025-08-09 23:51:06,912 - INFO - 전체 생성 ν…μŠ€νŠΈ (Raw):
1297
+ ---
1298
+ μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 포함 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1299
+
1300
+ 1. \( \sqrt{24} \times Consider this problem: \( \sqrt{24} \times 3^{\frac{2}{3}} \) 의 값은? [2점]
1301
+
1302
+ 선택
1303
+ ---
1304
+ 2025-08-09 23:51:06,912 - WARNING - ⚠️ κ²½κ³ : μ‘λ‹΅μ—μ„œ assistant 뢀뢄을 μ°Ύ μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 전체 ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
1305
+ 2025-08-09 23:51:06,912 - INFO - μ΅œμ’… λ°˜ν™˜ ν…μŠ€νŠΈ: μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1306
+
1307
+ 1. \( \sqrt{24} \times Consider this problem: \( \sqrt{24} \times 3^{\frac{2}{3}} \) 의 값은? [2점]
1308
+
1309
+ 선택
1310
+ 2025-08-09 23:51:06,912 - INFO - ⏱️ ttiming: tokenization=0.07s, generate=84.18s, decode=0.05s
1311
+ 2025-08-09 23:51:06,931 - INFO - βœ… 생성 μ™„λ£Œ (84.43초), 이미지 처리: True
1312
+ INFO: 127.0.0.1:49217 - "POST /generate HTTP/1.1" 200 OK
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+ -- django 둜그
1319
+
1320
+
1321
+ [DEBUG] WebSocket λ©”μ‹œμ§€ μˆ˜μ‹ :
1322
+ [DEBUG] user_message: 2개 이미지 λΉ„κ΅ν•΄μ€˜
1323
+ [DEBUG] image_urls: ['/media/image/chat_attach/test_image_01_XSZwb1W.jpg', '/media/image/chat_attach/test_image_02_oR6jRg0.png']
1324
+ [DEBUG] documents: []
1325
+ [DEBUG] room_id: 359
1326
+ πŸ” DBμ—μ„œ κ°€μ Έμ˜¨ μ„€μ •: ai_provider=lily, gemini_model=gemini-1.5-flash
1327
+ πŸ” JSON μ„€μ •μ—μ„œ κ°€μ Έμ˜¨ κ°’: {'aiEnabled': True, 'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1328
+ πŸ” JSON aiProvider μš°μ„  μ‚¬μš©: lily
1329
+ πŸ” JSON geminiModel μš°μ„  μ‚¬μš©: gemini-1.5-flash
1330
+ πŸ” μ΅œμ’… μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1331
+ πŸ” μ‚¬μš©μž AI μ„€μ •(DB): {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1332
+ πŸ” μ΅œμ’… κ²°μ •λœ 제곡자: lily
1333
+ πŸ” AI 제곡자: lily
1334
+ πŸ” Gemini λͺ¨λΈ: gemini-1.5-flash
1335
+ πŸš€ Lily LLM API 호좜
1336
+ πŸ”§ Lily URL=http://localhost:8001
1337
+ πŸ”§ Lily API μ„€μ •: URL=http://localhost:8001, Model=kanana-1.5-v-3b-instruct
1338
+ πŸ”§ ν™˜κ²½ 감지: RAILWAY_ENVIRONMENT=None
1339
+ πŸ–ΌοΈ 닀쀑 이미지 처리 μ‹œμž‘: 2개 이미지
1340
+ 🌐 이미지 URL 1: http://localhost:8000/media/image/chat_attach/test_image_01_XSZwb1W.jpg
1341
+ 127.0.0.1:63225 - - [09/Aug/2025:22:55:30] "GET /media/image/chat_attach/test_image_02_oR6jRg0.png" 200 18596
1342
+ 127.0.0.1:63224 - - [09/Aug/2025:22:55:30] "GET /media/image/chat_attach/test_image_01_XSZwb1W.jpg" 200 21590
1343
+ 127.0.0.1:63296 - - [09/Aug/2025:22:55:32] "GET /media/image/chat_attach/test_image_01_XSZwb1W.jpg" 200 21590
1344
+ βœ… 이미지 1 λ‹€μš΄λ‘œλ“œ 성곡: 21590 bytes
1345
+ 🌐 이미지 URL 2: http://localhost:8000/media/image/chat_attach/test_image_02_oR6jRg0.png
1346
+ 127.0.0.1:63298 - - [09/Aug/2025:22:55:34] "GET /media/image/chat_attach/test_image_02_oR6jRg0.png" 200 18596
1347
+ βœ… 이미지 2 λ‹€μš΄λ‘œλ“œ 성곡: 18596 bytes
1348
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ μ€€λΉ„ μ™„λ£Œ (2개 이미지 포함)
1349
+ πŸš€ Lily API 호좜 μ‹œμž‘: http://localhost:8001/generate
1350
+ πŸ“€ μš”μ²­ 데이터: {'prompt': 'νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.\n\nμ‚¬μš©μž λ©”μ‹œμ§€: 2개 이미지 λΉ„κ΅ν•΄μ€˜', 'max_length': 64, 'temperature': 0.7}
1351
+ πŸ“ 파일 포함 μ—¬λΆ€: True
1352
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ 전솑 (이미지 포함)
1353
+ βœ… Lily API 응닡 성곡: 두 μ΄λ―Έμ§€μ˜ 차이점을 뢄석해 λ“œλ¦΄κΉŒμš”? 예λ₯Ό λ“€μ–΄ 색상, ꡬ성 μš”μ†Œ, λ°°κ²½ μŠ€νƒ€μΌ λ“± μ–΄λ–€ 뢀뢄을 λΉ„κ΅ν•˜κ³  μ‹ΆμœΌμ‹ μ§€ μ•Œλ €μ£Όμ„Έμš”....
1354
+ βœ… μ‹€μ œ μ‚¬μš©λœ API: lily, AI 이름: Lily LLM
1355
+ AI λ©”μ‹œμ§€ μ €μž₯ 성곡: 1959, question_message: gigabitamin - 이미지 - 2개 이미지 λΉ„κ΅ν•΄μ€˜...
1356
+ πŸ“€ AI 응닡 전솑 μ€€λΉ„: 두 μ΄λ―Έμ§€μ˜ 차이점을 뢄석해 λ“œλ¦΄κΉŒμš”? 예λ₯Ό λ“€μ–΄ 색상, ꡬ성 μš”μ†Œ, λ°°κ²½ μŠ€νƒ€μΌ λ“± μ–΄λ–€...
1357
+ πŸ“€ λ°© ID: 359
1358
+ πŸ“€ AI 이름: Lily LLM
1359
+ πŸ“€ 디버그 이벀트: {'type': 'ai_message', 'message': '두 μ΄λ―Έμ§€μ˜ 차이점을 뢄석해 λ“œλ¦΄κΉŒμš”? 예λ₯Ό λ“€μ–΄ 색상, ꡬ성 μš”μ†Œ, λ°°κ²½ μŠ€νƒ€μΌ λ“± μ–΄λ–€ 뢀뢄을 λΉ„κ΅ν•˜κ³  μ‹ΆμœΌμ‹ μ§€ μ•Œλ €μ£Όμ„Έμš”.', 'roomId': 359, 'timestamp': '2025-08-09T13:59:56.786708+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM'}
1360
+ βœ… AI 응닡 WebSocket 전솑 μ™„λ£Œ
1361
+ πŸ“₯ AI λ©”μ‹œμ§€ 이벀트 μˆ˜μ‹ : {'type': 'ai_message', 'sender_type': 'ai', 'message': '두 μ΄λ―Έμ§€μ˜ 차이점을 뢄석해 λ“œλ¦΄κΉŒμš”? 예λ₯Ό λ“€μ–΄ 색상, ꡬ성 μš”μ†Œ, λ°°κ²½ μŠ€νƒ€μΌ λ“± μ–΄λ–€ 뢀뢄을 λΉ„κ΅ν•˜κ³  μ‹ΆμœΌμ‹ μ§€ μ•Œλ €μ£Όμ„Έμš”.', 'roomId': 359, 'timestamp': '2025-08-09T13:59:56.786708+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/test_image_01_XSZwb1W.jpg', '/media/image/chat_attach/test_image_02_oR6jRg0.png']}
1362
+ πŸ“€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑할 데이터: {'type': 'ai_message', 'message': '두 μ΄λ―Έμ§€μ˜ 차이점을 뢄석해 λ“œλ¦΄κΉŒμš”? 예λ₯Ό λ“€μ–΄ 색상, ꡬ성 μš”μ†Œ, λ°°κ²½ μŠ€νƒ€μΌ λ“± μ–΄λ–€ 뢀뢄을 λΉ„κ΅ν•˜κ³  μ‹ΆμœΌμ‹ μ§€ μ•Œλ €μ£Όμ„Έμš”.', 'roomId': 359, 'timestamp': '2025-08-09T13:59:56.786708+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/test_image_01_XSZwb1W.jpg', '/media/image/chat_attach/test_image_02_oR6jRg0.png']}
1363
+ βœ… AI λ©”μ‹œμ§€ ν΄λΌμ΄μ–ΈνŠΈ 전솑 μ™„λ£Œ
1364
+ 127.0.0.1:63552 - - [09/Aug/2025:23:00:48] "GET /api/chat/user/settings/" 200 845
1365
+ [DEBUG] WebSocket λ©”μ‹œμ§€ μˆ˜μ‹ :
1366
+ [DEBUG] user_message: 2개의 이미지에 쓰인 κΈ€μžλ“€ 각각 μ•Œλ €μ€˜
1367
+ [DEBUG] image_urls: []
1368
+ [DEBUG] documents: []
1369
+ [DEBUG] room_id: 359
1370
+ πŸ” DBμ—μ„œ κ°€μ Έμ˜¨ μ„€μ •: ai_provider=lily, gemini_model=gemini-1.5-flash
1371
+ πŸ” JSON μ„€μ •μ—μ„œ κ°€μ Έμ˜¨ κ°’: {'aiEnabled': True, 'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1372
+ πŸ” JSON aiProvider μš°μ„  μ‚¬μš©: lily
1373
+ πŸ” JSON geminiModel μš°μ„  μ‚¬μš©: gemini-1.5-flash
1374
+ πŸ” μ΅œμ’… μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1375
+ πŸ” μ‚¬μš©μž AI μ„€μ •(DB): {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1376
+ πŸ”§ ν΄λΌμ΄μ–ΈνŠΈ AI μ„€μ • 적용: {'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct'}
1377
+ πŸ”§ 병합 ν›„ μ΅œμ’… AI μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1378
+ πŸ” μ΅œμ’… κ²°μ •λœ 제곡자: lily
1379
+ πŸ” AI 제곡자: lily
1380
+ πŸ” Gemini λͺ¨λΈ: gemini-1.5-flash
1381
+ πŸš€ Lily LLM API 호좜
1382
+ πŸ”§ Lily URL=http://localhost:8001
1383
+ πŸ”§ Lily API μ„€μ •: URL=http://localhost:8001, Model=kanana-1.5-v-3b-instruct
1384
+ πŸ”§ ν™˜κ²½ 감지: RAILWAY_ENVIRONMENT=None
1385
+ πŸ“ ν…μŠ€νŠΈ μ „μš© μš”μ²­
1386
+ πŸ“€ μš”μ²­ 데이터: {'prompt': 'νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.\n\nμ‚¬μš©μž λ©”μ‹œμ§€: 2개의 이미지에 쓰인 κΈ€μžλ“€ 각각 μ•Œλ €μ€˜', 'max_length': 64, 'temperature': 0.7}
1387
+ πŸ“ 파일 포함 μ—¬λΆ€: False
1388
+ πŸ”„ ν…μŠ€νŠΈ μ „μš© μš”μ²­ 전솑
1389
+ 127.0.0.1:63590 - - [09/Aug/2025:23:03:01] "GET /api/social-connections/" 200 157
1390
+ βœ… Lily API 응닡 성곡: μ•„, 두 개의 이미지λ₯Ό 보여주면 μ’‹κ² λ„€μš”! κΈ€μžκ°€ μžˆλŠ” 이미지라면 ν…μŠ€νŠΈλ₯Ό μ½μ–΄λ“œλ¦΄ 수 μžˆμ–΄μš”. ν•˜λ‚˜μ”© μ˜¬λ €μ£Όμ‹œκ±°λ‚˜ μ„€λͺ…을 ν•΄μ£Όμ‹œλ©΄ λ„μ™€λ“œλ¦΄κ²Œμš”! 😊...
1391
+ βœ… μ‹€μ œ μ‚¬μš©λœ API: lily, AI 이름: Lily LLM
1392
+ AI λ©”μ‹œμ§€ μ €μž₯ 성곡: 1961, question_message: gigabitamin - ν…μŠ€νŠΈ - 2개의 이미지에 쓰인 κΈ€μžλ“€ 각각 μ•Œλ €μ€˜...
1393
+ πŸ“€ AI 응닡 전솑 μ€€λΉ„: μ•„, 두 개의 이미지λ₯Ό 보여주면 μ’‹κ² λ„€μš”! κΈ€μžκ°€ μžˆλŠ” 이미지라면 ν…μŠ€νŠΈλ₯Ό μ½μ–΄λ“œλ¦΄ 수 있...
1394
+ πŸ“€ λ°© ID: 359
1395
+ πŸ“€ AI 이름: Lily LLM
1396
+ πŸ“€ 디버그 이벀트: {'type': 'ai_message', 'message': 'μ•„, 두 개의 이미지λ₯Ό 보여주면 μ’‹κ² λ„€μš”! κΈ€μžκ°€ μžˆλŠ” 이미지라면 ν…μŠ€νŠΈλ₯Ό μ½μ–΄λ“œλ¦΄ 수 μžˆμ–΄μš”. ν•˜λ‚˜μ”© μ˜¬λ €μ£Όμ‹œκ±°λ‚˜ μ„€λͺ…을 ν•΄μ£Όμ‹œλ©΄ λ„μ™€λ“œλ¦΄κ²Œμš”! 😊', 'roomId': 359, 'timestamp': '2025-08-09T14:12:16.646721+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM'}
1397
+ βœ… AI 응닡 WebSocket 전솑 μ™„λ£Œ
1398
+ πŸ“₯ AI λ©”μ‹œμ§€ 이벀트 μˆ˜μ‹ : {'type': 'ai_message', 'sender_type': 'ai', 'message': 'μ•„, 두 개의 이미지λ₯Ό 보여주면 μ’‹κ² λ„€μš”! κΈ€μžκ°€ μžˆλŠ” 이미지라면 ν…μŠ€νŠΈλ₯Ό μ½μ–΄λ“œλ¦΄ 수 μžˆμ–΄μš”. ν•˜λ‚˜μ”© μ˜¬λ €μ£Όμ‹œκ±°λ‚˜ μ„€λͺ…을 ν•΄μ£Όμ‹œλ©΄ λ„μ™€λ“œλ¦΄κ²Œμš”! 😊', 'roomId': 359, 'timestamp': '2025-08-09T14:12:16.646721+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': []}
1399
+ πŸ“€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑할 데이터: {'type': 'ai_message', 'message': 'μ•„, 두 개의 이미지λ₯Ό 보여주면 μ’‹κ² λ„€μš”! κΈ€μžκ°€ μžˆλŠ” 이미지라면 ν…μŠ€νŠΈλ₯Ό μ½μ–΄λ“œλ¦΄ 수 μžˆμ–΄μš”. ν•˜λ‚˜μ”© μ˜¬λ €μ£Όμ‹œκ±°λ‚˜ μ„€λͺ…을 ν•΄μ£Όμ‹œλ©΄ λ„μ™€λ“œλ¦΄κ²Œμš”! 😊', 'roomId': 359, 'timestamp': '2025-08-09T14:12:16.646721+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': []}
1400
+ βœ… AI λ©”μ‹œμ§€ ν΄λΌμ΄μ–ΈνŠΈ 전솑 μ™„λ£Œ
1401
+ 127.0.0.1:64104 - - [09/Aug/2025:23:26:10] "POST /api/chat/upload_image/" 200 87
1402
+ 127.0.0.1:64106 - - [09/Aug/2025:23:26:10] "POST /api/chat/upload_image/" 200 87
1403
+ [DEBUG] WebSocket λ©”μ‹œμ§€ μˆ˜μ‹ :
1404
+ [DEBUG] user_message: 2개의 이미지에 쓰인 κΈ€μžλ“€ λͺ¨λ‘ μ•Œλ €μ€˜
1405
+ [DEBUG] image_urls: ['/media/image/chat_attach/test_image_01_mTSu52g.jpg', '/media/image/chat_attach/test_image_04_xI12FZ3.jpg']
1406
+ [DEBUG] documents: []
1407
+ [DEBUG] room_id: 359
1408
+ πŸ” DBμ—μ„œ κ°€μ Έμ˜¨ μ„€μ •: ai_provider=lily, gemini_model=gemini-1.5-flash
1409
+ πŸ” JSON μ„€μ •μ—μ„œ κ°€μ Έμ˜¨ κ°’: {'aiEnabled': True, 'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1410
+ πŸ” JSON aiProvider μš°μ„  μ‚¬μš©: lily
1411
+ πŸ” JSON geminiModel μš°μ„  μ‚¬μš©: gemini-1.5-flash
1412
+ πŸ” μ΅œμ’… μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1413
+ πŸ” μ‚¬μš©μž AI μ„€μ •(DB): {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1414
+ πŸ” μ΅œμ’… κ²°μ •λœ 제곡자: lily
1415
+ πŸ” AI 제곡자: lily
1416
+ πŸ” Gemini λͺ¨λΈ: gemini-1.5-flash
1417
+ πŸš€ Lily LLM API 호좜
1418
+ πŸ”§ Lily URL=http://localhost:8001
1419
+ πŸ”§ Lily API μ„€μ •: URL=http://localhost:8001, Model=kanana-1.5-v-3b-instruct
1420
+ πŸ”§ ν™˜κ²½ 감지: RAILWAY_ENVIRONMENT=None
1421
+ πŸ–ΌοΈ 닀쀑 이미지 처리 μ‹œμž‘: 2개 이미지
1422
+ 🌐 이미지 URL 1: http://localhost:8000/media/image/chat_attach/test_image_01_mTSu52g.jpg
1423
+ 127.0.0.1:64113 - - [09/Aug/2025:23:26:11] "GET /media/image/chat_attach/test_image_04_xI12FZ3.jpg" 200 30949
1424
+ 127.0.0.1:64112 - - [09/Aug/2025:23:26:11] "GET /media/image/chat_attach/test_image_01_mTSu52g.jpg" 200 21590
1425
+ 127.0.0.1:64116 - - [09/Aug/2025:23:26:13] "GET /media/image/chat_attach/test_image_01_mTSu52g.jpg" 200 21590
1426
+ βœ… 이미지 1 λ‹€μš΄λ‘œλ“œ 성곡: 21590 bytes
1427
+ 🌐 이미지 URL 2: http://localhost:8000/media/image/chat_attach/test_image_04_xI12FZ3.jpg
1428
+ 127.0.0.1:64119 - - [09/Aug/2025:23:26:15] "GET /media/image/chat_attach/test_image_04_xI12FZ3.jpg" 200 30949
1429
+ βœ… 이미지 2 λ‹€μš΄λ‘œλ“œ 성곡: 30949 bytes
1430
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ μ€€λΉ„ μ™„λ£Œ (2개 이미지 포함)
1431
+ πŸš€ Lily API 호좜 μ‹œμž‘: http://localhost:8001/generate
1432
+ πŸ“€ μš”μ²­ 데이터: {'prompt': 'νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.\n\nμ‚¬μš©μž λ©”μ‹œμ§€: 2개의 이미지에 쓰인 κΈ€μžλ“€ λͺ¨λ‘ μ•Œλ €μ€˜', 'max_length': 64, 'temperature': 0.7}
1433
+ πŸ“ 파일 포함 μ—¬λΆ€: True
1434
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ 전솑 (이미지 포함)
1435
+ βœ… Lily API 응닡 성곡: 이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.
1436
+
1437
+ 첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.
1438
+ 두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μžκ°€ 있으며, "i" μœ„μ— μž‘...
1439
+ βœ… μ‹€μ œ μ‚¬μš©λœ API: lily, AI 이름: Lily LLM
1440
+ AI λ©”μ‹œμ§€ μ €μž₯ 성곡: 1963, question_message: gigabitamin - 이미지 - 2개의 이미지에 쓰인 κΈ€μžλ“€ λͺ¨λ‘ μ•Œλ €μ€˜...
1441
+ πŸ“€ AI 응닡 전솑 μ€€λΉ„: 이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.
1442
+
1443
+ 첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€...
1444
+ πŸ“€ λ°© ID: 359
1445
+ πŸ“€ AI 이름: Lily LLM
1446
+ πŸ“€ 디버그 이벀트: {'type': 'ai_message', 'message': '이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.\n\n첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€. \n두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μžκ°€ 있으며, "i" μœ„μ— μž‘μ€ 별 λͺ¨μ–‘μ˜ λ””ν…ŒμΌμ΄ μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.\n\n도움이 ν•„μš”', 'roomId': 359, 'timestamp': '2025-08-09T14:31:57.802565+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM'}
1447
+ βœ… AI 응닡 WebSocket 전솑 μ™„λ£Œ
1448
+ πŸ“₯ AI λ©”μ‹œμ§€ 이벀트 μˆ˜μ‹ : {'type': 'ai_message', 'sender_type': 'ai', 'message': '이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.\n\n첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€. \n두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μžκ°€ 있으며, "i" μœ„μ— μž‘μ€ 별 λͺ¨μ–‘μ˜ λ””ν…ŒμΌμ΄ μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.\n\n도움이 ν•„μš”', 'roomId': 359, 'timestamp': '2025-08-09T14:31:57.802565+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/test_image_01_mTSu52g.jpg', '/media/image/chat_attach/test_image_04_xI12FZ3.jpg']}
1449
+ πŸ“€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑할 데이터: {'type': 'ai_message', 'message': '이미지에 쓰인 κΈ€μžλ“€μ„ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.\n\n첫 번째 μ΄λ―Έμ§€μ—λŠ” "Copilot"μ΄λΌλŠ” κΈ€μžκ°€ μžˆμŠ΅λ‹ˆλ‹€. \n두 번째 μ΄λ―Έμ§€μ—λŠ” "Gemini"λΌλŠ” κΈ€μžκ°€ 있으며, "i" μœ„μ— μž‘μ€ 별 λͺ¨μ–‘μ˜ λ””ν…ŒμΌμ΄ μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.\n\n도움이 ν•„μš”', 'roomId': 359, 'timestamp': '2025-08-09T14:31:57.802565+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/test_image_01_mTSu52g.jpg', '/media/image/chat_attach/test_image_04_xI12FZ3.jpg']}
1450
+ βœ… AI λ©”μ‹œμ§€ ν΄λΌμ΄μ–ΈνŠΈ 전솑 μ™„λ£Œ
1451
+ 127.0.0.1:64961 - - [09/Aug/2025:23:34:57] "GET /api/chat/user/settings/" 200 845
1452
+ [DEBUG] WebSocket λ©”μ‹œμ§€ μˆ˜μ‹ :
1453
+ [DEBUG] user_message: λ„€ 이름은 λ­λ‹ˆ?
1454
+ [DEBUG] image_urls: []
1455
+ [DEBUG] documents: []
1456
+ [DEBUG] room_id: 359
1457
+ πŸ” DBμ—μ„œ κ°€μ Έμ˜¨ μ„€μ •: ai_provider=lily, gemini_model=gemini-1.5-flash
1458
+ πŸ” JSON μ„€μ •μ—μ„œ κ°€μ Έμ˜¨ κ°’: {'aiEnabled': True, 'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1459
+ πŸ” JSON aiProvider μš°μ„  μ‚¬μš©: lily
1460
+ πŸ” JSON geminiModel μš°μ„  μ‚¬μš©: gemini-1.5-flash
1461
+ πŸ” μ΅œμ’… μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1462
+ πŸ” μ‚¬μš©μž AI μ„€μ •(DB): {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1463
+ πŸ”§ ν΄λΌμ΄μ–ΈνŠΈ AI μ„€μ • 적용: {'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct'}
1464
+ πŸ”§ 병합 ν›„ μ΅œμ’… AI μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1465
+ πŸ” μ΅œμ’… κ²°μ •λœ 제곡자: lily
1466
+ πŸ” AI 제곡자: lily
1467
+ πŸ” Gemini λͺ¨λΈ: gemini-1.5-flash
1468
+ πŸš€ Lily LLM API 호좜
1469
+ πŸ”§ Lily URL=http://localhost:8001
1470
+ πŸ”§ Lily API μ„€μ •: URL=http://localhost:8001, Model=kanana-1.5-v-3b-instruct
1471
+ πŸ”§ ν™˜κ²½ 감지: RAILWAY_ENVIRONMENT=None
1472
+ πŸ“ ν…μŠ€νŠΈ μ „μš© μš”μ²­
1473
+ πŸ“€ μš”μ²­ 데이터: {'prompt': 'νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.\n\nμ‚¬μš©μž λ©”μ‹œμ§€: λ„€ 이름은 λ­λ‹ˆ?', 'max_length': 64, 'temperature': 0.7}
1474
+ πŸ“ 파일 포함 μ—¬λΆ€: False
1475
+ πŸ”„ ν…μŠ€νŠΈ μ „μš© μš”μ²­ 전솑
1476
+
1477
+
1478
+ [DEBUG] WebSocket λ©”μ‹œμ§€ μˆ˜μ‹ :
1479
+ [DEBUG] user_message: 이미지 λΆ„μ„ν•΄μ€˜
1480
+ [DEBUG] image_urls: ['/media/image/chat_attach/latex_ocr_test_ZS3QMye.png']
1481
+ [DEBUG] documents: []
1482
+ [DEBUG] room_id: 359
1483
+ πŸ” DBμ—μ„œ κ°€μ Έμ˜¨ μ„€μ •: ai_provider=lily, gemini_model=gemini-1.5-flash
1484
+ πŸ” JSON μ„€μ •μ—μ„œ κ°€μ Έμ˜¨ κ°’: {'aiEnabled': True, 'aiProvider': 'lily', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1485
+ πŸ” JSON aiProvider μš°μ„  μ‚¬μš©: lily
1486
+ πŸ” JSON geminiModel μš°μ„  μ‚¬μš©: gemini-1.5-flash
1487
+ πŸ” μ΅œμ’… μ„€μ •: {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1488
+ πŸ” μ‚¬μš©μž AI μ„€μ •(DB): {'aiProvider': 'lily', 'aiEnabled': True, 'geminiModel': 'gemini-1.5-flash', 'lilyApiUrl': 'http://localhost:8001', 'lilyModel': 'kanana-1.5-v-3b-instruct', 'chatgptApiKey': '', 'geminiApiKey': '', 'autoRespond': True, 'responseDelay': 1000, 'maxTokens': 20, 'temperature': 0.8}
1489
+ πŸ” μ΅œμ’… κ²°μ •λœ 제곡자: lily
1490
+ πŸ” AI 제곡자: lily
1491
+ πŸ” Gemini λͺ¨λΈ: gemini-1.5-flash
1492
+ πŸš€ Lily LLM API 호좜
1493
+ πŸ”§ Lily URL=http://localhost:8001
1494
+ πŸ”§ Lily API μ„€μ •: URL=http://localhost:8001, Model=kanana-1.5-v-3b-instruct
1495
+ πŸ”§ ν™˜κ²½ 감지: RAILWAY_ENVIRONMENT=None
1496
+ πŸ–ΌοΈ 닀쀑 이미지 처리 μ‹œμž‘: 1개 이미지
1497
+ 🌐 이미지 URL 1: http://localhost:8000/media/image/chat_attach/latex_ocr_test_ZS3QMye.png
1498
+ 127.0.0.1:49212 - - [09/Aug/2025:23:49:38] "GET /media/image/chat_attach/latex_ocr_test_ZS3QMye.png" 200 4181
1499
+ 127.0.0.1:49214 - - [09/Aug/2025:23:49:40] "GET /media/image/chat_attach/latex_ocr_test_ZS3QMye.png" 200 4181
1500
+ βœ… 이미지 1 λ‹€μš΄λ‘œλ“œ 성곡: 4181 bytes
1501
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ μ€€λΉ„ μ™„λ£Œ (1개 이미지 포함)
1502
+ πŸš€ Lily API 호좜 μ‹œμž‘: http://localhost:8001/generate
1503
+ πŸ“€ μš”μ²­ 데이터: {'prompt': 'νŽΈμ•ˆν•˜κ³  μΉœκ·Όν•˜κ²Œ μžμ—°μŠ€λŸ½κ³  νŽΈμ•ˆν•œ λŒ€ν™”λ₯Ό μ΄μ–΄κ°€μ„Έμš”. μ‚¬μš©μžμ˜ 관심사에 μ§‘μ€‘ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ„Έμš”.\n\nμ‚¬μš©μž λ©”μ‹œμ§€: 이미지 λΆ„μ„ν•΄μ€˜', 'max_length': 64, 'temperature': 0.7}
1504
+ πŸ“ 파일 포함 μ—¬λΆ€: True
1505
+ πŸ”„ λ©€ν‹°λͺ¨λ‹¬ μš”μ²­ 전솑 (이미지 포함)
1506
+ βœ… Lily API 응닡 성곡: μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1507
+
1508
+ 1. \( \sqrt{24} \times Consider this problem: \( \sqrt{2...
1509
+ βœ… μ‹€μ œ μ‚¬μš©λœ API: lily, AI 이름: Lily LLM
1510
+ AI λ©”μ‹œμ§€ μ €μž₯ 성곡: 1967, question_message: gigabitamin - 이미지 - 이미지 λΆ„μ„ν•΄μ€˜...
1511
+ πŸ“€ AI 응닡 전솑 μ€€λΉ„: μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
1512
+
1513
+ 1. \( ...
1514
+ πŸ“€ λ°© ID: 359
1515
+ πŸ“€ AI 이름: Lily LLM
1516
+ πŸ“€ 디버그 이벀트: {'type': 'ai_message', 'message': 'μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:\n\n1. \\( \\sqrt{24} \\times Consider this problem: \\( \\sqrt{24} \\times 3^{\\frac{2}{3}} \\) 의 값은? [2점]\n\n선택', 'roomId': 359, 'timestamp': '2025-08-09T14:51:06.976465+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM'}
1517
+ βœ… AI 응닡 WebSocket 전솑 μ™„λ£Œ
1518
+ πŸ“₯ AI λ©”μ‹œμ§€ 이벀트 μˆ˜μ‹ : {'type': 'ai_message', 'sender_type': 'ai', 'message': 'μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:\n\n1. \\( \\sqrt{24} \\times Consider this problem: \\( \\sqrt{24} \\times 3^{\\frac{2}{3}} \\) 의 값은? [2점]\n\n선택', 'roomId': 359, 'timestamp': '2025-08-09T14:51:06.976465+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/latex_ocr_test_ZS3QMye.png']}
1519
+ πŸ“€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑할 데이터: {'type': 'ai_message', 'message': 'μ΄λ―Έμ§€μ—λŠ” μˆ˜ν•™ λ¬Έμ œμ™€ 선택지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:\n\n1. \\( \\sqrt{24} \\times Consider this problem: \\( \\sqrt{24} \\times 3^{\\frac{2}{3}} \\) 의 값은? [2점]\n\n선택', 'roomId': 359, 'timestamp': '2025-08-09T14:51:06.976465+00:00', 'questioner_username': 'gigabitamin', 'ai_name': 'Lily LLM', 'sender': 'Lily LLM', 'imageUrls': ['/media/image/chat_attach/latex_ocr_test_ZS3QMye.png']}
1520
+ βœ… AI λ©”μ‹œμ§€ ν΄λΌμ΄μ–ΈνŠΈ 전솑 μ™„λ£Œ
1521
+
1522
+
1523
+
1524
+ ----
1525
+
1526
+
1527
 
1528
 
1529