Skip to content

Commit 479ebc8

Browse files
committed
feat(util): null modelId'leri düzeltmek için yeni bir yöntem eklendi; modelId oluşturma ve silme işlemleri güncellendi
1 parent 546b24f commit 479ebc8

File tree

2 files changed

+159
-30
lines changed

2 files changed

+159
-30
lines changed

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

Lines changed: 120 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -155,26 +155,46 @@ private Mono<Integer> processJsonContent(String jsonContent) {
155155
if (modelObj instanceof java.util.Map) {
156156
java.util.Map<String, Object> modelMap = (java.util.Map<String, Object>) modelObj;
157157

158-
// Model ID kontrolü
159-
String modelId = String.valueOf(modelMap.get("modelId"));
160-
if (modelId == null || "null".equals(modelId)) {
161-
log.warn("Geçersiz modelId bulundu, model atlanıyor");
158+
// Model ID kontrolü - null değerleri atla
159+
String modelId = null;
160+
161+
if (modelMap.containsKey("modelId")) {
162+
modelId = String.valueOf(modelMap.get("modelId"));
163+
} else if (modelMap.containsKey("id")) {
164+
modelId = String.valueOf(modelMap.get("id"));
165+
} else if (modelMap.containsKey("name")) {
166+
// İsmi ID olarak kullan
167+
String name = String.valueOf(modelMap.get("name"));
168+
modelId = providerName.toLowerCase() + "/" + name.toLowerCase().replace(" ", "-");
169+
}
170+
171+
// null, "null" veya boş string kontrolü
172+
if (modelId == null || "null".equals(modelId) || modelId.trim().isEmpty()) {
173+
log.warn("Geçersiz modelId bulundu, model atlanıyor: {}", modelMap);
162174
continue;
163175
}
164176

177+
final String finalModelId = modelId; // Lambda için final değişken
178+
179+
// Log model ID'yi
180+
log.debug("Model yükleniyor: ID={}, Provider={}", modelId, savedProvider.getName());
181+
165182
AIModel model = AIModel.builder()
166-
.modelId(modelId) // Changed from id() to modelId()
167-
.modelName(String.valueOf(modelMap.get("name")))
183+
.modelId(finalModelId)
184+
.modelName(String.valueOf(modelMap.getOrDefault("name", finalModelId)))
168185
.provider(savedProvider.getName())
169186
.maxInputTokens(modelMap.containsKey("maxTokens") ?
170187
((Number)modelMap.get("maxTokens")).intValue() : 8000)
171188
.contextLength(contextLength != null ? contextLength : 131072)
172189
.build();
173190

174191
modelSaveOps.add(modelRepository.save(model)
175-
.doOnSuccess(m -> modelCount.incrementAndGet())
192+
.doOnSuccess(m -> {
193+
modelCount.incrementAndGet();
194+
log.debug("Model kaydedildi: {}", m.getModelId());
195+
})
176196
.onErrorResume(e -> {
177-
log.error("Model '{}' kaydedilirken hata: {}", modelId, e.getMessage());
197+
log.error("Model '{}' kaydedilirken hata: {}", finalModelId, e.getMessage());
178198
return Mono.empty();
179199
}));
180200
}
@@ -194,49 +214,119 @@ private Mono<Integer> processJsonContent(String jsonContent) {
194214

195215
processTasks.add(providerTask);
196216
}
197-
// Normal model objeleri için - Sadece modelId'nin varlığını kontrol ediyoruz
198-
else if (itemMap.containsKey("modelId")) {
199-
AIModel model = objectMapper.convertValue(obj, AIModel.class);
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+
}
200256

201257
// Provider adı kontrolü
202-
String providerName = model.getProvider();
203-
if (providerName == null || providerName.trim().isEmpty()) {
204-
if (itemMap.containsKey("provider")) {
205-
providerName = (String) itemMap.get("provider");
206-
}
207-
208-
// Hala null ise varsayılan değer ata
209-
if (providerName == null || providerName.trim().isEmpty()) {
210-
log.warn("Model '{}' için provider adı bulunamadı, 'Bilinmeyen' olarak ayarlanıyor",
211-
model.getModelId());
212-
providerName = "Bilinmeyen";
213-
model.setProvider(providerName);
214-
}
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";
215266
}
216267

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+
217307
// Provider'ı kaydet
218-
final String finalProviderName = providerName;
219308
Provider provider = Provider.builder()
220-
.name(finalProviderName)
309+
.name(providerName)
221310
.build();
222311

312+
final AIModel finalModel = model;
223313
Mono<Void> modelTask = providerRepository.save(provider)
224314
.onErrorResume(e -> {
225315
// Bu provider zaten varsa hatayı yut ve provider'ı getir
226316
if (e instanceof org.springframework.dao.DuplicateKeyException) {
227-
log.info("Provider '{}' zaten var, yeniden kullanılıyor", finalProviderName);
228-
return providerRepository.findById(finalProviderName);
317+
log.info("Provider '{}' zaten var, yeniden kullanılıyor", providerName);
318+
return providerRepository.findById(providerName);
229319
}
230320
log.error("Provider kaydedilirken hata: {}", e.getMessage());
231321
return Mono.error(e);
232322
})
233-
.then(modelRepository.save(model))
323+
.then(modelRepository.save(finalModel))
234324
.doOnSuccess(savedModel -> {
235325
modelCount.incrementAndGet();
236326
log.debug("Model kaydedildi: {}", savedModel.getModelId());
237327
})
238328
.onErrorResume(e -> {
239-
log.error("Model '{}' kaydedilirken hata: {}", model.getModelId(), e.getMessage());
329+
log.error("Model '{}' kaydedilirken hata: {}", finalModel.getModelId(), e.getMessage());
240330
return Mono.empty();
241331
})
242332
.then();

user-service/src/main/java/com/craftpilot/userservice/util/ModelDataFixer.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void run(String... args) throws Exception {
3838

3939
// Fix models with redundant _id and id fields
4040
fixModelStructure()
41+
.then(fixNullModelIds())
4142
.then(ensureProvidersExist())
4243
.doOnSuccess(v -> log.info("Model data fixing completed successfully"))
4344
.doOnError(e -> log.error("Error fixing model data: {}", e.getMessage(), e))
@@ -75,6 +76,44 @@ private Mono<Void> fixModelStructure() {
7576
.then();
7677
}
7778

79+
/**
80+
* Null modelId içeren modelleri düzeltir veya siler
81+
*/
82+
private Mono<Void> fixNullModelIds() {
83+
log.info("Fixing null modelIds...");
84+
85+
// Null modelId'li modelleri bul
86+
Query nullIdQuery = Query.query(Criteria.where("modelId").is(null));
87+
88+
return mongoTemplate.find(nullIdQuery, AIModel.class)
89+
.flatMap(model -> {
90+
// Null modelId'yi düzeltmeye çalış
91+
if (model.getModelName() != null && model.getProvider() != null) {
92+
// Model adı ve provider'dan geçici bir ID oluştur
93+
String generatedId = model.getProvider().toLowerCase() + "/" +
94+
model.getModelName().toLowerCase().replace(" ", "-");
95+
96+
log.info("Generated modelId '{}' for model with null modelId", generatedId);
97+
98+
model.setModelId(generatedId);
99+
100+
// Modeli güncelle
101+
return modelRepository.save(model)
102+
.onErrorResume(e -> {
103+
log.error("Error fixing null modelId for model {}: {}",
104+
model.getModelName(), e.getMessage());
105+
// Düzeltemezsek sil
106+
return mongoTemplate.remove(model);
107+
});
108+
} else {
109+
// Model adı veya provider yoksa, bu modeli sil
110+
log.warn("Removing invalid model with null modelId and missing name/provider");
111+
return mongoTemplate.remove(model);
112+
}
113+
})
114+
.then();
115+
}
116+
78117
private Mono<Void> ensureProvidersExist() {
79118
log.info("Ensuring providers exist...");
80119

0 commit comments

Comments
 (0)