Explorer
/proc/127/root/tmp/aa047_patch_graphiti.py
← Zurück ↓ Download
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))