from pathlib import Path
p=Path('/opt/struktur/graphiti/service/main.py')
s=p.read_text()
old=""" except Exception as exc:
status=504 if isinstance(exc,APITimeoutError) else 502 if isinstance(exc,AuthenticationError) else 500
phase='provider_authentication' if isinstance(exc,AuthenticationError) else 'provider_timeout' if status==504 else 'graphiti_processing'
_finish_request(request_id,'error',status,phase,str(exc)[:1500],phase,0,None,0)
return JSONResponse(status_code=status, content={'error_type':type(exc).__name__,'error_phase':phase,'provider_http_status':getattr(getattr(exc,'response',None),'status_code',None) or (401 if isinstance(exc,AuthenticationError) else None),'provider_error_code':'missing_authentication_header' if isinstance(exc,AuthenticationError) else None,'provider_message':str(exc)[:500],'request_id':request_id,'run_id':run_id,'llm_call_number':0,'retryable':False,'rate_limit_reset':None,'episode_created':False,'episode_uuid':None})
"""
new=""" except Exception as exc:
raw_error=str(exc)
# The child worker may wrap ProviderRateLimitError in graphiti_worker_failed.
# Preserve the provider retry class instead of collapsing it into HTTP 500.
is_rate_limit = ('RateLimitError' in raw_error or 'provider_rate_limit' in raw_error or
'temporarily rate-limited' in raw_error or '"code": 429' in raw_error)
if is_rate_limit:
_finish_request(request_id,'rate_limited',429,'provider_rate_limit','Provider rate limit','provider_rate_limit',0,None,0)
return JSONResponse(status_code=429, content={'error':'provider_rate_limit','error_phase':'provider_rate_limit','request_id':request_id,'run_id':run_id,'retryable':True,'episode_created':False,'episode_uuid':None})
status=504 if isinstance(exc,APITimeoutError) else 502 if isinstance(exc,AuthenticationError) else 500
phase='provider_authentication' if isinstance(exc,AuthenticationError) else 'provider_timeout' if status==504 else 'graphiti_processing'
_finish_request(request_id,'error',status,phase,raw_error[:1500],phase,0,None,0)
return JSONResponse(status_code=status, content={'error_type':type(exc).__name__,'error_phase':phase,'provider_http_status':getattr(getattr(exc,'response',None),'status_code',None) or (401 if isinstance(exc,AuthenticationError) else None),'provider_error_code':'missing_authentication_header' if isinstance(exc,AuthenticationError) else None,'provider_message':raw_error[:500],'request_id':request_id,'run_id':run_id,'llm_call_number':0,'retryable':False,'rate_limit_reset':None,'episode_created':False,'episode_uuid':None})
"""
if old not in s: raise SystemExit('graphiti block not found')
p.write_text(s.replace(old,new,1))