Nolist commited on
Commit
d187cb3
·
verified ·
1 Parent(s): f194a79

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -9
app.py CHANGED
@@ -337,40 +337,91 @@ def normalize_assistant_text(x):
337
  # Query wrapper: tries modern chat, responses, legacy shapes
338
 
339
  def query_openai(system_prompt: str, user_message: str, max_tokens=800, temperature=0.2):
 
 
 
 
 
 
 
 
340
  client, err = make_openai_client(OPENAI_api_key)
341
  if err:
342
  return {"error": err}
 
343
  model = OPENAI_model or "gpt-4o-mini"
 
344
  try:
345
- # modern client.chat.create
346
  if hasattr(client, "chat") and hasattr(client.chat, "create"):
347
  resp = client.chat.create(
348
  model=model,
349
- messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_message}],
 
 
 
350
  temperature=temperature,
351
  max_tokens=max_tokens,
352
  )
353
  return {"text": extract_text_from_response(resp)}
354
- # legacy openai.ChatCompletion
355
- if hasattr(client, "ChatCompletion"):
 
356
  resp = client.ChatCompletion.create(
357
  model=model,
358
- messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_message}],
 
 
 
359
  temperature=temperature,
360
  max_tokens=max_tokens,
361
  )
362
  return {"text": extract_text_from_response(resp)}
363
- # responses API
 
364
  if hasattr(client, "responses") and hasattr(client.responses, "create"):
365
  prompt = system_prompt + "\n\n" + user_message
366
- resp = client.responses.create(model=model, input=prompt, max_tokens=max_tokens, temperature=temperature)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  return {"text": extract_text_from_response(resp)}
368
- # fallback
369
- return {"error": "OpenAI client present but no compatible chat method found."}
 
370
  except Exception as e:
371
  return {"error": f"OpenAI request failed: {e}"}
372
 
373
 
 
374
  # System prompt builder that respects UI language
375
 
376
  def make_system_prompt(wound_type: str, victim_info: dict) -> str:
 
337
  # Query wrapper: tries modern chat, responses, legacy shapes
338
 
339
  def query_openai(system_prompt: str, user_message: str, max_tokens=800, temperature=0.2):
340
+ """
341
+ Robust OpenAI query that supports:
342
+ - modern client.chat.create(...)
343
+ - legacy openai.ChatCompletion.create(...)
344
+ - client.responses.create(...) (tries several kwarg combinations)
345
+ - older Completion.create(...)
346
+ Returns {"text": "..."} on success or {"error": "..."} on failure.
347
+ """
348
  client, err = make_openai_client(OPENAI_api_key)
349
  if err:
350
  return {"error": err}
351
+
352
  model = OPENAI_model or "gpt-4o-mini"
353
+
354
  try:
355
+ # 1) Modern OpenAI SDK: client.chat.create(...)
356
  if hasattr(client, "chat") and hasattr(client.chat, "create"):
357
  resp = client.chat.create(
358
  model=model,
359
+ messages=[
360
+ {"role": "system", "content": system_prompt},
361
+ {"role": "user", "content": user_message},
362
+ ],
363
  temperature=temperature,
364
  max_tokens=max_tokens,
365
  )
366
  return {"text": extract_text_from_response(resp)}
367
+
368
+ # 2) Legacy openai package: ChatCompletion.create(...)
369
+ if hasattr(client, "ChatCompletion") and hasattr(client.ChatCompletion, "create"):
370
  resp = client.ChatCompletion.create(
371
  model=model,
372
+ messages=[
373
+ {"role": "system", "content": system_prompt},
374
+ {"role": "user", "content": user_message},
375
+ ],
376
  temperature=temperature,
377
  max_tokens=max_tokens,
378
  )
379
  return {"text": extract_text_from_response(resp)}
380
+
381
+ # 3) Responses API: client.responses.create(...)
382
  if hasattr(client, "responses") and hasattr(client.responses, "create"):
383
  prompt = system_prompt + "\n\n" + user_message
384
+ response = None
385
+ last_exc = None
386
+
387
+ # Try several kwarg shapes because different SDK versions accept different names
388
+ candidate_kw_sets = [
389
+ {"model": model, "input": prompt, "max_output_tokens": max_tokens, "temperature": temperature},
390
+ {"model": model, "input": prompt, "max_tokens": max_tokens, "temperature": temperature},
391
+ {"model": model, "input": prompt, "temperature": temperature},
392
+ {"model": model, "input": prompt},
393
+ ]
394
+
395
+ for kw in candidate_kw_sets:
396
+ try:
397
+ response = client.responses.create(**kw)
398
+ break
399
+ except TypeError as te:
400
+ # argument mismatch for this kw set — try next
401
+ last_exc = te
402
+ continue
403
+ except Exception as e:
404
+ # other runtime errors (auth/quota) -> return as error
405
+ return {"error": f"OpenAI responses request failed: {e}"}
406
+
407
+ if response is None:
408
+ return {"error": f"OpenAI responses client didn't accept tried args. Last error: {last_exc}"}
409
+
410
+ return {"text": extract_text_from_response(response)}
411
+
412
+ # 4) Very old Completion API fallback
413
+ if hasattr(client, "Completion") and hasattr(client.Completion, "create"):
414
+ prompt = system_prompt + "\n\n" + user_message
415
+ resp = client.Completion.create(model=model, prompt=prompt, max_tokens=max_tokens, temperature=temperature)
416
  return {"text": extract_text_from_response(resp)}
417
+
418
+ return {"error": "OpenAI client present but no compatible chat method found. Consider upgrading the openai package."}
419
+
420
  except Exception as e:
421
  return {"error": f"OpenAI request failed: {e}"}
422
 
423
 
424
+
425
  # System prompt builder that respects UI language
426
 
427
  def make_system_prompt(wound_type: str, victim_info: dict) -> str: