Skip to content

Commit d398cb5

Browse files
committed
fix(ModelDataFixer): modelId ile eşleşmeyen eski ID'leri temizle; null modelId'ler için model güncelleme işlemleri düzeltildi
1 parent e6ec874 commit d398cb5

File tree

2 files changed

+145
-164
lines changed

2 files changed

+145
-164
lines changed

user-service/src/main/java/com/craftpilot/userservice/service/ModelDataLoader.java

Lines changed: 139 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,15 @@ private Mono<Integer> processJsonContent(String jsonContent) {
122122

123123
// Meta provider gibi özel formatlar için
124124
if (itemMap.containsKey("provider") && itemMap.containsKey("models") && itemMap.get("models") instanceof List) {
125-
String providerName = (String) itemMap.get("provider");
125+
// Provider işlemleri için kopya
126+
final String providerName = (String) itemMap.get("provider");
126127
// Provider adı null kontrolü - null ise bu provider'ı atla
127128
if (providerName == null || providerName.trim().isEmpty()) {
128129
log.warn("Provider ismi boş veya null olan bir provider bulundu. Bu provider atlanıyor.");
129130
continue;
130131
}
131132

132-
Integer contextLength = itemMap.containsKey("contextLength") ?
133+
final Integer contextLength = itemMap.containsKey("contextLength") ?
133134
((Number)itemMap.get("contextLength")).intValue() : null;
134135

135136
Provider provider = Provider.builder()
@@ -177,7 +178,7 @@ private Mono<Integer> processJsonContent(String jsonContent) {
177178
final String finalModelId = modelId; // Lambda için final değişken
178179

179180
// Log model ID'yi
180-
log.debug("Model yükleniyor: ID={}, Provider={}", modelId, savedProvider.getName());
181+
log.debug("Model yükleniyor: ID={}, Provider={}", finalModelId, savedProvider.getName());
181182

182183
AIModel model = AIModel.builder()
183184
.modelId(finalModelId)
@@ -211,167 +212,148 @@ private Mono<Integer> processJsonContent(String jsonContent) {
211212
return Mono.empty();
212213
})
213214
.then();
214-
215-
processTasks.add(providerTask);
216-
}
217-
// Normal model objeleri için
218-
else if (itemMap.containsKey("modelId") || itemMap.containsKey("id") || itemMap.containsKey("name")) {
219-
// Model ID'yi doğru alandan al
220-
String modelId = null;
221-
222-
if (itemMap.containsKey("modelId")) {
223-
modelId = String.valueOf(itemMap.get("modelId"));
224-
} else if (itemMap.containsKey("id")) {
225-
modelId = String.valueOf(itemMap.get("id"));
226-
} else if (itemMap.containsKey("name")) {
227-
// İsmi ID olarak kullan ama provider ile birleştir
228-
String name = String.valueOf(itemMap.get("name"));
229-
String providerName = itemMap.containsKey("provider") ?
230-
String.valueOf(itemMap.get("provider")) : "unknown";
231-
modelId = providerName.toLowerCase() + "/" + name.toLowerCase().replace(" ", "-");
232-
}
233-
234-
// null, "null" veya boş string kontrolü
235-
if (modelId == null || "null".equals(modelId) || modelId.trim().isEmpty()) {
236-
log.warn("Geçersiz modelId bulundu, model atlanıyor: {}", itemMap);
237-
continue;
238-
}
239-
240-
// ModelId'yi güncelleyelim
241-
final String finalModelId = modelId; // Lambda için final değişken
242-
243-
// AIModel nesnesini manuel oluştur
244-
AIModel model = new AIModel();
245-
model.setModelId(finalModelId);
246-
247-
// Model name
248-
if (itemMap.containsKey("name") || itemMap.containsKey("modelName")) {
249-
String modelName = itemMap.containsKey("modelName") ?
250-
String.valueOf(itemMap.get("modelName")) :
251-
String.valueOf(itemMap.get("name"));
252-
model.setModelName(modelName);
253-
} else {
254-
model.setModelName(finalModelId); // Eğer isim yoksa ID'yi kullan
255-
}
256-
257-
// Provider adı kontrolü
258-
String providerName = null;
259-
if (itemMap.containsKey("provider")) {
260-
providerName = String.valueOf(itemMap.get("provider"));
261-
} else if (finalModelId.contains("/")) {
262-
// ID'den provider adını çıkar (örn: "openai/gpt-4" -> "openai")
263-
providerName = finalModelId.split("/")[0];
264-
} else {
265-
providerName = "Bilinmeyen";
266-
}
267-
268-
model.setProvider(providerName);
269-
270-
// Diğer alanları ayarla
271-
if (itemMap.containsKey("maxInputTokens")) {
272-
model.setMaxInputTokens(((Number)itemMap.get("maxInputTokens")).intValue());
273-
} else if (itemMap.containsKey("maxTokens")) {
274-
model.setMaxInputTokens(((Number)itemMap.get("maxTokens")).intValue());
275-
} else {
276-
model.setMaxInputTokens(8000); // Varsayılan değer
277-
}
278-
279-
if (itemMap.containsKey("contextLength")) {
280-
model.setContextLength(((Number)itemMap.get("contextLength")).intValue());
281-
} else {
282-
model.setContextLength(131072); // Varsayılan değer
283-
}
284-
285-
// İsteğe bağlı diğer alanlar
286-
if (itemMap.containsKey("requiredPlan")) {
287-
model.setRequiredPlan(String.valueOf(itemMap.get("requiredPlan")));
288-
}
289-
290-
if (itemMap.containsKey("creditCost") && itemMap.get("creditCost") instanceof Number) {
291-
model.setCreditCost(((Number)itemMap.get("creditCost")).intValue());
292-
}
293-
294-
if (itemMap.containsKey("creditType")) {
295-
model.setCreditType(String.valueOf(itemMap.get("creditType")));
296-
}
297-
298-
if (itemMap.containsKey("category")) {
299-
model.setCategory(String.valueOf(itemMap.get("category")));
300-
}
301-
302-
// Log model bilgilerini
303-
log.debug("Model hazırlandı: ID={}, Name={}, Provider={}",
304-
model.getModelId(), model.getModelName(), model.getProvider());
305-
306-
307-
// Provider'ı kaydet
308-
Provider provider = Provider.builder()
309-
.name(providerName)
310-
.build();
311-
312-
final AIModel finalModel = model;
313-
Mono<Void> modelTask = providerRepository.save(provider)
314-
.onErrorResume(e -> {
315-
// Bu provider zaten varsa hatayı yut ve provider'ı getir
316-
if (e instanceof org.springframework.dao.DuplicateKeyException) {
317-
log.info("Provider '{}' zaten var, yeniden kullanılıyor", providerName);
318-
return providerRepository.findById(providerName);
319-
}
320-
log.error("Provider kaydedilirken hata: {}", e.getMessage());
321-
return Mono.error(e);
322-
})
323-
.then(modelRepository.save(finalModel))
324-
.doOnSuccess(savedModel -> {
325-
modelCount.incrementAndGet();
326-
log.debug("Model kaydedildi: {}", savedModel.getModelId());
327-
})
328-
.onErrorResume(e -> {
329-
log.error("Model '{}' kaydedilirken hata: {}", finalModel.getModelId(), e.getMessage());
330-
return Mono.empty();
331-
})
332-
.then();
333-
334-
processTasks.add(modelTask);
215+
216+
processTasks.add(providerTask);
217+
}
218+
// Normal model objeleri için
219+
else if (itemMap.containsKey("modelId") || itemMap.containsKey("id") || itemMap.containsKey("name")) {
220+
// Model ID'yi doğru alandan al
221+
String modelId = null;
222+
223+
if (itemMap.containsKey("modelId")) {
224+
modelId = String.valueOf(itemMap.get("modelId"));
225+
} else if (itemMap.containsKey("id")) {
226+
modelId = String.valueOf(itemMap.get("id"));
227+
} else if (itemMap.containsKey("name")) {
228+
// İsmi ID olarak kullan ama provider ile birleştir
229+
String name = String.valueOf(itemMap.get("name"));
230+
String providerName = itemMap.containsKey("provider") ?
231+
String.valueOf(itemMap.get("provider")) : "unknown";
232+
modelId = providerName.toLowerCase() + "/" + name.toLowerCase().replace(" ", "-");
233+
}
234+
235+
// null, "null" veya boş string kontrolü
236+
if (modelId == null || "null".equals(modelId) || modelId.trim().isEmpty()) {
237+
log.warn("Geçersiz modelId bulundu, model atlanıyor: {}", itemMap);
238+
continue;
239+
}
240+
241+
// ModelId'yi güncelleyelim
242+
final String finalModelId = modelId; // Lambda için final değişken
243+
244+
// Provider adı kontrolü
245+
final String providerName;
246+
if (itemMap.containsKey("provider")) {
247+
providerName = String.valueOf(itemMap.get("provider"));
248+
} else if (finalModelId.contains("/")) {
249+
// ID'den provider adını çıkar (örn: "openai/gpt-4" -> "openai")
250+
providerName = finalModelId.split("/")[0];
335251
} else {
336-
log.warn("Desteklenmeyen model format, atlanıyor: {}", itemMap);
252+
providerName = "Bilinmeyen";
337253
}
254+
255+
// AIModel nesnesini manuel oluştur
256+
AIModel model = new AIModel();
257+
model.setModelId(finalModelId);
258+
259+
// Model name
260+
if (itemMap.containsKey("name") || itemMap.containsKey("modelName")) {
261+
String modelName = itemMap.containsKey("modelName") ?
262+
String.valueOf(itemMap.get("modelName")) :
263+
String.valueOf(itemMap.get("name"));
264+
model.setModelName(modelName);
265+
} else {
266+
model.setModelName(finalModelId); // Eğer isim yoksa ID'yi kullan
267+
}
268+
269+
model.setProvider(providerName);
270+
271+
// Diğer alanları ayarla
272+
if (itemMap.containsKey("maxInputTokens")) {
273+
model.setMaxInputTokens(((Number)itemMap.get("maxInputTokens")).intValue());
274+
} else if (itemMap.containsKey("maxTokens")) {
275+
model.setMaxInputTokens(((Number)itemMap.get("maxTokens")).intValue());
276+
} else {
277+
model.setMaxInputTokens(8000); // Varsayılan değer
278+
}
279+
280+
if (itemMap.containsKey("contextLength")) {
281+
model.setContextLength(((Number)itemMap.get("contextLength")).intValue());
282+
} else {
283+
model.setContextLength(131072); // Varsayılan değer
284+
}
285+
286+
// İsteğe bağlı diğer alanlar
287+
if (itemMap.containsKey("requiredPlan")) {
288+
model.setRequiredPlan(String.valueOf(itemMap.get("requiredPlan")));
289+
}
290+
291+
if (itemMap.containsKey("creditCost") && itemMap.get("creditCost") instanceof Number) {
292+
model.setCreditCost(((Number)itemMap.get("creditCost")).intValue());
293+
}
294+
295+
if (itemMap.containsKey("creditType")) {
296+
model.setCreditType(String.valueOf(itemMap.get("creditType")));
297+
}
298+
299+
if (itemMap.containsKey("category")) {
300+
model.setCategory(String.valueOf(itemMap.get("category")));
301+
}
302+
303+
// Log model bilgilerini
304+
log.debug("Model hazırlandı: ID={}, Name={}, Provider={}",
305+
model.getModelId(), model.getModelName(), model.getProvider());
306+
307+
// Provider'ı kaydet
308+
Provider provider = Provider.builder()
309+
.name(providerName)
310+
.build();
311+
312+
final AIModel finalModel = model;
313+
Mono<Void> modelTask = providerRepository.save(provider)
314+
.onErrorResume(e -> {
315+
// Bu provider zaten varsa hatayı yut ve provider'ı getir
316+
if (e instanceof org.springframework.dao.DuplicateKeyException) {
317+
log.info("Provider '{}' zaten var, yeniden kullanılıyor", providerName);
318+
return providerRepository.findById(providerName);
319+
}
320+
log.error("Provider kaydedilirken hata: {}", e.getMessage());
321+
return Mono.error(e);
322+
})
323+
.then(modelRepository.save(finalModel))
324+
.doOnSuccess(savedModel -> {
325+
modelCount.incrementAndGet();
326+
log.debug("Model kaydedildi: {}", savedModel.getModelId());
327+
})
328+
.onErrorResume(e -> {
329+
log.error("Model '{}' kaydedilirken hata: {}", finalModel.getModelId(), e.getMessage());
330+
return Mono.empty();
331+
})
332+
.then();
333+
334+
processTasks.add(modelTask);
335+
} else {
336+
log.warn("Desteklenmeyen model format, atlanıyor: {}", itemMap);
338337
}
339-
} catch (Exception e) {
340-
log.error("Tek bir model işlenirken hata: {}", e.getMessage(), e);
341-
// Hatayı yut ve diğer modelleri işlemeye devam et
342338
}
339+
} catch (Exception e) {
340+
log.error("Tek bir model işlenirken hata: {}", e.getMessage(), e);
341+
// Hatayı yut ve diğer modelleri işlemeye devam et
343342
}
344-
345-
// Now save all collected providers
346-
for (Provider provider : providerMap.values()) {
347-
Mono<Void> providerTask = providerRepository.save(provider)
348-
.onErrorResume(e -> {
349-
if (e instanceof org.springframework.dao.DuplicateKeyException) {
350-
log.info("Provider '{}' zaten var, yeniden kullanılıyor", provider.getName());
351-
return Mono.empty();
352-
}
353-
log.error("Provider kaydedilirken hata: {}", e.getMessage());
354-
return Mono.error(e);
355-
})
356-
.then();
357-
358-
processTasks.add(providerTask);
359-
}
360-
361-
if (processTasks.isEmpty()) {
362-
log.warn("İşlenecek model bulunamadı");
363-
return Mono.just(0);
364-
}
365-
366-
return Flux.mergeSequential(processTasks)
367-
.then(Mono.just(modelCount.get()));
368-
369-
} catch (Exception e) {
370-
log.error("JSON model verisi işlenirken hata: {}", e.getMessage(), e);
371-
return Mono.error(e);
372343
}
344+
345+
if (processTasks.isEmpty()) {
346+
log.warn("İşlenecek model bulunamadı");
347+
return Mono.just(0);
348+
}
349+
350+
return Flux.mergeSequential(processTasks)
351+
.then(Mono.just(modelCount.get()));
352+
353+
} catch (Exception e) {
354+
log.error("JSON model verisi işlenirken hata: {}", e.getMessage(), e);
355+
return Mono.error(e);
373356
}
374-
375357
/**
376358
* Belirtilen JSON dosyasından modelleri yükler.
377359
* ModelDataLoaderCommand için gereklidir.

0 commit comments

Comments
 (0)