From e87d19432b8bfd74aac68653a3da1c1485270db5 Mon Sep 17 00:00:00 2001 From: Peter Howell Date: Fri, 29 Aug 2025 22:35:35 +0000 Subject: [PATCH] gpt --- gpt.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/gpt.py b/gpt.py index 884a066..9f6d90a 100644 --- a/gpt.py +++ b/gpt.py @@ -17,20 +17,61 @@ SAVE_ATTACHEMENTS = 1 def gpt_chat(instruction, prompt, model=DEFAULT_MODEL): + # 1) Strip extremely long Outlook protection URLs first + try: + prompt = re.sub(r"\S*protection\.outlook\.com\S*", "", prompt, flags=re.I) + except Exception: + pass + + # 2) Crude token estimation and truncation (target ~29k tokens) + # Approximates 1 token ≈ 4 characters. + def _est_tokens(s): + try: + return max(1, int(len(s) / 4)) + except Exception: + return 1 + + MAX_TOKENS = 29000 + # reserve some tokens for system/overhead + overhead = 200 + inst_tokens = _est_tokens(instruction) + prompt_tokens = _est_tokens(prompt) + total = inst_tokens + prompt_tokens + overhead + if total > MAX_TOKENS: + allow = max(500, MAX_TOKENS - inst_tokens - overhead) + # convert back to characters + allow_chars = max(2000, allow * 4) + # keep last N chars under assumption latest content is most relevant + if len(prompt) > allow_chars: + prompt = prompt[-allow_chars:] + messages = [ {"role": "system", "content": instruction}, {"role": "user", "content": prompt} - ] + ] - response = client.chat.completions.create(model=model, messages=messages) - result = response.choices[0].message.content + try: + response = client.chat.completions.create(model=model, messages=messages) + result = response.choices[0].message.content + except Exception as e: + # Graceful failure; log and return empty JSON + try: + log3 = codecs.open('cache/gptlog.txt','a','utf-8') + log3.write(json.dumps({'prompt': prompt[:2000], 'error': str(e)}, indent=2)) + log3.write("\n\n---\n\n") + log3.close() + except Exception: + pass + return "{}" - - log3 = codecs.open('cache/gptlog.txt','a','utf-8') - log3.write(json.dumps({'prompt':prompt, 'result': result},indent=2)) - log3.write("\n\n---\n\n") - log3.close() - + # Log success + try: + log3 = codecs.open('cache/gptlog.txt','a','utf-8') + log3.write(json.dumps({'prompt':prompt, 'result': result},indent=2)) + log3.write("\n\n---\n\n") + log3.close() + except Exception: + pass return result def summarize_u_info(msg):