Files
Guido.Tech/ai_intelligence_layer/__pycache__/main.cpython-313.pyc

169 lines
26 KiB
Plaintext
Raw Normal View History

2025-10-18 22:36:20 -05:00
<EFBFBD>
<00><><EFBFBD>h3o<00> <00>.<00>%SrSSKJrJrJrJrJr SSKJr SSK J
r
SSK J r SSK Jr SSKrSSKrSSKrSSKJrJrJr SS KJr SSKrSS
KJr SS KJrJrJrJr SS KJ r J!r! SS K"J#r# SSK$J%r% SSK&J'r' \RP"\RRSS9 \RT"\+5r,Sq-\'\.S'Sq/\#\.S'Sq0\%\.S'Sq1\\.S'SSS.q2\\3\44\.S'"SS5r5"SS5r6\5"5r7\6"5r8\S\4Sj5r9\"SS S!\9S"9r:\:Rw\S#/S$S#/S#/S%9 \:RyS&\
"S'S(9S'S)9 \:R{S*5S+5r>\:R{S,\!S-9S.5r?\:R<>S/5S0\4S1j5rA\:R<>S2\ S-9S3\4S4j5rB\:R<>S55S6\4S7j5rD\:R<>S85S6\4S9j5rES:\4S;\S<\S=\S>\\3\44
S?jrF\+S@:Xa3SSKGrG\"5rH\GR<47>"SA\HR<48>\HR<48>S$SB9 gg)Cz<43>
2025-10-18 22:36:20 -05:00
AI Intelligence Layer - FastAPI Application
Port: 9000
Provides F1 race strategy generation and analysis using Gemini AI.
Supports WebSocket connections from Pi for bidirectional control.
<EFBFBD>)<05>FastAPI<50> HTTPException<6F>status<75> WebSocket<65>WebSocketDisconnect)<01>CORSMiddleware)<01> StaticFiles<65><01> FileResponse)<01>asynccontextmanagerN)<03>Dict<63>Any<6E>List)<01>datetime)<01> get_settings)<04>BrainstormRequest<73>EnrichedTelemetryWebhook<6F>EnrichedTelemetryWithContext<78> RaceContext)<02>BrainstormResponse<73>HealthResponse)<01>StrategyGenerator)<01>TelemetryClient)<01>TelemetryBufferz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)<02>level<65>format<61>telemetry_buffer<65>strategy_generator<6F>telemetry_client<6E>current_race_context<78><00><02>
brake_bias<EFBFBD>differential_slip<69>last_control_commandc<00>n<00>\rSrSrSrSrS\4SjrS\4SjrS\S\ \
\ 44Sjr S\ \
\ 44S jr S
rg ) <0C>ConnectionManager<65>6z.Manages WebSocket connections from Pi clients.c<00> <00>/UlSUlg)Nr<00><02>active_connections<6E>vehicle_counter<65><01>selfs <20>?/Users/adipu/Documents/HPCSimSite/ai_intelligence_layer/main.py<70>__init__<5F>ConnectionManager.__init__9s<00><00>35<33><04><1F> <20><04><1C><00> websocketc<00><00> # <00>UR5IShv<01>N URRU5 U=RS- sl[R S[ UR535 UR$Nk7f)N<>z(Pi client connected. Total connections: )<07>acceptr+<00>appendr,<00>logger<65>info<66>len<65>r.r3s r/<00>connect<63>ConnectionManager.connect=sm<00><00><00><17><1E><1E> <20> <20> <20> <0C><1F><1F>&<26>&<26>y<EFBFBD>1<> <0C><1C><1C><01>!<21><1C><0E> <0B> <0B>><3E>s<EFBFBD>4<EFBFBD>CZ<43>CZ<43>?[<5B>>\<5C>]<5D>^<5E><13>#<23>#<23>#<23> !<21>s<00>B<01>B<04>A,Bc<00><><00>URRU5 [RS[ UR535 g)Nz+Pi client disconnected. Total connections: )r+<00>remover8r9r:r;s r/<00>
disconnect<EFBFBD>ConnectionManager.disconnectDs6<00><00> <0C><1F><1F>&<26>&<26>y<EFBFBD>1<><0E> <0B> <0B>A<>#<23>d<EFBFBD>F]<5D>F]<5D>B^<5E>A_<41>`<60>ar2<00>commandc<00><00>B# <00>URU5IShv<01>N gN7f)z+Send control command to specific Pi client.N)<01> send_json)r.r3rBs r/<00>send_control_command<6E>&ConnectionManager.send_control_commandHs<00><00><00><17>!<21>!<21>'<27>*<2A>*<2A>*<2A>s <00><01><04>c<00><00><># <00>URHnURU5IShv<01>N M gN ![a#n[R SU35 SnAMLSnAff=f7f)z6Broadcast control command to all connected Pi clients.NzError broadcasting to client: )r+rD<00> Exceptionr8<00>error)r.rB<00>
connection<EFBFBD>es r/<00>broadcast_control_command<6E>+ConnectionManager.broadcast_control_commandLsZ<00><00><00><1E>1<>1<>J<EFBFBD> C<01> <20>*<2A>*<2A>7<EFBFBD>3<>3<>3<>2<>3<><33><1C> C<01><16> <0C> <0C>=<3D>a<EFBFBD>S<EFBFBD>A<>B<>B<><42> C<01>s6<00>A#<01>3<02>1<06>3<02>A#<01>3<02>
A <05>A<05>A#<01>A <05> A#r*N)<0F>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__r0rr<r@r <00>strrrErL<00>__static_attributes__<5F>r2r/r'r'6sV<00><00>8<>!<21>$<24>y<EFBFBD>$<24>b<01>I<EFBFBD>b<01>+<2B>I<EFBFBD>+<2B><04>S<EFBFBD>RU<52>X<EFBFBD><0E>+<2B>C<01>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>Cr2r'c<00>R<00>\rSrSrSrSrS\4SjrS\4SjrS\ \
\ 44Sjr S r g
) <0B>DashboardManager<65>Tz4Manages WebSocket connections for dashboard clients.c<00><00>/Ulg)N<><01>active_dashboardsr-s r/r0<00>DashboardManager.__init__Ws
<00><00>24<32><04>r2r3c<00><00><># <00>UR5IShv<01>N URRU5 [R S[ UR535 gNK7f)Nz'Dashboard connected. Total dashboards: )r6r[r7r8r9r:r;s r/r<<00>DashboardManager.connectZsP<00><00><00><17><1E><1E> <20> <20> <20> <0C><1E><1E>%<25>%<25>i<EFBFBD>0<><0E> <0B> <0B>=<3D>c<EFBFBD>$<24>BX<42>BX<42>>Y<>=Z<>[<5B>\<5C> !<21>s<00>A$<01>A"<04>A A$c<00><><00>XR;aGURRU5 [RS[ UR535 gg)Nz*Dashboard disconnected. Total dashboards: )r[r?r8r9r:r;s r/r@<00>DashboardManager.disconnect_sG<00><00> <14>.<2E>.<2E> .<2E> <10> "<22> "<22> )<29> )<29>)<29> 4<> <12>K<EFBFBD>K<EFBFBD>D<>S<EFBFBD><14>I_<49>I_<49>E`<60>Da<44>b<> c<> /r2<00>messagec<00><00>$# <00>/nURHnURU5IShv<01>N M UHnUR U5 M gN#![a4n[R SU35 UR U5 SnAMwSnAff=f7f)z.Broadcast message to all connected dashboards.Nz!Error broadcasting to dashboard: )r[rDrHr8rIr7r@)r.ra<00> disconnected<65> dashboardrKs r/<00> broadcast<73>DashboardManager.broadcastds<><00><00><00><19> <0C><1D>/<2F>/<2F>I<EFBFBD> /<2F><1F>)<29>)<29>'<27>2<>2<>2<>0<>&<26>I<EFBFBD> <10>O<EFBFBD>O<EFBFBD>I<EFBFBD> &<26>&<26> 3<><33><1C> /<2F><16> <0C> <0C>@<40><11><03>D<>E<><1C>#<23>#<23>I<EFBFBD>.<2E>.<2E><> /<2F>s=<00>B<01>A<02>A <06>A<02>B<01> A<02>
B <05>)B<05>B<01>B <05> BrZN)rNrOrPrQrRr0rr<r@r rSrrerTrUr2r/rWrWTs:<00><00>><3E>5<>]<01>y<EFBFBD>]<01>
d<01>I<EFBFBD>d<01>
'<27>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E> 'r2rW<00>appc<00><># <00>[5n[RSUR35 [RSUR35 [RSUR
35 [ 5q[5q [5q [RS5 S7v<00> [RS5 g7f)z*Lifecycle manager for FastAPI application.z'Starting AI Intelligence Layer on port z Demo mode: zStrategy count: z%All services initialized successfullyNz#Shutting down AI Intelligence Layer) rr8r9<00>ai_service_port<72> demo_mode<64>strategy_countrrrrrr)rg<00>settingss r/<00>lifespanrmvs<><00><00><00>
2025-10-18 22:36:20 -05:00
<1C>~<7E>H<EFBFBD>
<EFBFBD>K<EFBFBD>K<EFBFBD>9<>(<28>:R<>:R<>9S<39>T<>U<>
2025-10-18 23:56:53 -05:00
<EFBFBD>K<EFBFBD>K<EFBFBD>+<2B>h<EFBFBD>0<>0<>1<>2<>3<>
<EFBFBD>K<EFBFBD>K<EFBFBD>"<22>8<EFBFBD>#:<3A>#:<3A>";<3B><<3C>=<3D>'<27>(<28><14>*<2A>,<2C><16>&<26>(<28><14>
<EFBFBD>K<EFBFBD>K<EFBFBD>7<>8<> <09> <0B>K<EFBFBD>K<EFBFBD>5<>6<>s<00>B?CzF1 AI Intelligence LayerzGAdvanced race strategy generation and analysis using HPC telemetry data<74>1.0.0)<04>title<6C> description<6F>versionrm<00>*T)<04> allow_origins<6E>allow_credentials<6C> allow_methods<64> allow_headersz/static<69>static)<01> directory)<01>name<6D>/c<00><00> # <00>[S5$7f)zServe the dashboard HTML page.zstatic/dashboard.htmlr
rUr2r/rdrd<00>s<00><00><00> <18>/<2F> 0<>0<>s<00> z /api/health)<01>response_modelc<00><00>`# <00>[5n[SSSURURS9$7f)zHealth check endpoint.<2E>healthyzAI Intelligence Layerrn)r<00>servicerqrj<00>enrichment_service_url)rrrjr<>)rls r/<00> health_checkr<6B><00>s6<00><00><00><1C>~<7E>H<EFBFBD> <19><18>'<27><17><1A>$<24>$<24>'<27>><3E>><3E>  <06><06>s<00>,.z/api/ingest/enriched<65>datac <00><00># <00>[RSURR35 [R UR5 UR q[RSS9nU(Ga[U5S:<3A>a<>[RS[U5S35 [RUUR S9IShv<01>N n[RS [UR5S
URR35 S URR[R5[UR5URVs/sHo3R5PM snS .$[RSU(a [U5OSS35 SURR[R5S.$GNs snf![aWn[R!S U3SS9 SURR[R5[#U5S.sSnA$SnAff=f![aAn[R!SU35 [%[&R(S[#U53S9eSnAff=f7f)z<>
2025-10-18 22:36:20 -05:00
Webhook receiver for enriched telemetry data from HPC enrichment module.
This is called when enrichment service has NEXT_STAGE_CALLBACK_URL configured.
Receives enriched telemetry + race context and automatically triggers strategy brainstorming.
z)Received enriched telemetry webhook: lap <20>
<00><01>limit<69>z)Auto-triggering strategy brainstorm with z telemetry records<64><02>enriched_telemetry<72> race_contextNzAuto-generated z strategies for lap <20>received_and_processed)r<00>lap<61> buffer_size<7A>strategies_generated<65>
strategieszError in auto-brainstorm: T<><01>exc_info<66>received_but_brainstorm_failed)rr<>r<>rIzBuffer has only rz4 records, waiting for more data before brainstorming<6E>received_waiting_for_more_data)rr<>r<>zError ingesting telemetry: zFailed to ingest telemetry: <20><02> status_code<64>detail)r8r9r<>r<>r<00>addr<64>r <00>
get_latestr:r<00>generater<65><00>size<7A>
model_dumprHrIrSrr<00>HTTP_500_INTERNAL_SERVER_ERROR)r<><00> buffer_data<74>response<73>srKs r/<00>ingest_enriched_telemetryr<79><00>sI<00><00><00>5
<EFBFBD><0E> <0B> <0B>?<3F><04>@W<>@W<>@[<5B>@[<5B>?\<5C>]<5D>^<5E> <19><1C><1C>T<EFBFBD>4<>4<>5<> $<24>0<>0<><1C>'<27>1<>1<><02>1<>;<3B> <0B> <16>3<EFBFBD>{<7B>+<2B>q<EFBFBD>0<> <12>K<EFBFBD>K<EFBFBD>C<>C<EFBFBD> <0B>DT<44>CU<43>Ug<55>h<> i<> <12>!3<>!<<3C>!<<3C>'2<>!%<25>!2<>!2<>"=<3D>"<12><12><08>
<17> <0B> <0B>o<EFBFBD>c<EFBFBD>(<28>2E<32>2E<32>.F<>-G<>G[<5B>\`<60>\s<>\s<>\w<>\w<>[x<>y<>z<>7<><1F>2<>2<>6<>6<>#3<>#8<>#8<>#:<3A>,/<2F><08>0C<30>0C<30>,D<>;C<>;N<>;N<>"O<>;N<>a<EFBFBD><<3C><<3C>><3E>;N<>"O<> <12><12>" <13>K<EFBFBD>K<EFBFBD>*<2A>{<7B>3<EFBFBD>{<7B>+;<3B>PQ<50>*R<>SG<02>H<02> I<02>:<3A><1B>.<2E>.<2E>2<>2<>/<2F>4<>4<>6<><0E> <0E>3<12><>#P<01><><1C> <12><16> <0C> <0C>9<>!<21><13>=<3D><04> <0C>M<>?<3F><1F>2<>2<>6<>6<>#3<>#8<>#8<>#:<3A> <20><11>V<EFBFBD> <12><12><> <12><>" <15>
2025-10-18 22:36:20 -05:00
<EFBFBD><0E> <0C> <0C>2<>1<EFBFBD>#<23>6<>7<><1B><1E>=<3D>=<3D>1<>#<23>a<EFBFBD>&<26><18>:<3A>
<EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD>s<EFBFBD><00>J
<01>B#H<<00>(!G<00> G<04>
BG<00>G <0C>4G<00>8J
<01>9AH<<00>J
<01>G<00>G<00>
H9<03>"A H4<03>.H9<03>/H<<00>3J
<01>4H9<03>9H<<00><
J<03><J<03>J<03>J
z/api/strategy/brainstorm<72>requestc<00><00><># <00>[RSURRR35 [RSURR
2025-10-18 22:36:20 -05:00
R SURR
R35 URnU(d<>[RSS9nU(a%[RS[U5S35 UnOP[RS5 [R5IS hv<01>N nU(d[[R S
S 9e["R%UURS 9IS hv<01>N n[RS [UR&5S35 U$NwN4![a e[(a@n[R+SU3SS9 [[R,S[/U53S 9eS nAff=f7f)z~
Generate 20 diverse race strategies based on enriched telemetry and race context.
This is Step 1 of the AI strategy process.
zBrainstorming strategies for z Current lap: rzr<>r<>zUsing z& telemetry records from webhook bufferz;No telemetry in buffer, fetching from enrichment service...NzvNo enriched telemetry available. Please provide data, ensure enrichment service is running, or configure webhook push.r<>r<>z
Generated z strategieszError in brainstorm: Tr<54><00>Strategy generation failed: )r8r9r<><00> driver_state<74> driver_name<6D> race_info<66> current_lap<61>
total_lapsr<EFBFBD>rr<>r:r<00> fetch_latestrr<00>HTTP_400_BAD_REQUESTrr<>r<>rHrIr<>rS)r<><00> enriched_datar<61>r<>rKs r/<00>brainstorm_strategiesr<73><00>s<><00><00><00> &
2025-10-18 22:36:20 -05:00
<EFBFBD><0E> <0B> <0B>3<>G<EFBFBD>4H<34>4H<34>4U<34>4U<34>4a<34>4a<34>3b<33>c<>d<><0E> <0B> <0B>m<EFBFBD>G<EFBFBD>$8<>$8<>$B<>$B<>$N<>$N<>#O<>q<EFBFBD>QX<51>Qe<51>Qe<51>Qo<51>Qo<51>Qz<51>Qz<51>P{<7B>|<7C>}<7D> <20>2<>2<> <0A><1C>*<2A>5<>5<>B<EFBFBD>5<>?<3F>K<EFBFBD><1A><16> <0B> <0B>f<EFBFBD>S<EFBFBD><1B>%5<>$6<>6\<5C>]<5D>^<5E> +<2B> <0A><17> <0B> <0B>Y<>Z<>&6<>&C<>&C<>&E<> E<> <0A>$<24>'<27>$*<2A>$?<3F>$?<3F> X<02><16><16> ,<2C>4<>4<>,<2C> <20>-<2D>-<2D>5<>
<EFBFBD>
<EFBFBD><08>
<0F> <0B> <0B>j<EFBFBD><13>X<EFBFBD>%8<>%8<>!9<> :<3A>+<2B>F<>G<><17><0F>!F<01>
<EFBFBD><EFBFBD> <19><0E> <0A> <14>
<EFBFBD><0E> <0C> <0C>,<2C>Q<EFBFBD>C<EFBFBD>0<>4<EFBFBD> <0C>@<40><1B><1E>=<3D>=<3D>1<>#<23>a<EFBFBD>&<26><18>:<3A>
<EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD>sN<00>G"<01>D F <00>F<04>AF <00>F <04>1F <00>G"<01>F <00> F <00> G<03>;G<03>G<03>G"z /ws/dashboardr3c<00><00><># <00>[RU5IShv<01>N UR5IShv<01>N nUS:XaURS5IShv<01>N M9N?N'N
![a [
R S5 O.[a"n[
RSU35 SnAOSnAff=f[RU5 g![RU5 f=f7f)zf
WebSocket endpoint for dashboard clients.
Broadcasts vehicle connection status and lap data updates.
N<EFBFBD>ping<6E>pongz[Dashboard] Client disconnectedz[Dashboard] Error: )
<EFBFBD>dashboard_managerr<<00> receive_text<78> send_textrr8r9rHrIr@)r3r<>rKs r/<00>websocket_dashboard_endpointr<74>[s<><00><00><00> <1C>
#<23>
#<23>I<EFBFBD>
.<2E>.<2E>.<2E> 0<><12>"<22>/<2F>/<2F>1<>1<>D<EFBFBD><13>v<EFBFBD>~<7E><1F>)<29>)<29>&<26>1<>1<>1<> <13> /<2F> 2<>2<><32> <1E>7<><0E> <0B> <0B>5<>6<> <14>0<><0E> <0C> <0C>*<2A>1<EFBFBD>#<23>.<2E>/<2F>/<2F><>0<><30> <1A>$<24>$<24>Y<EFBFBD>/<2F><><19>$<24>$<24>Y<EFBFBD>/<2F>sx<00>C <01>A<04>C <01>A!<00>A<04>A!<00>A<04>A!<00>C <01>A!<00>A!<00>!B-<03>C<00> B-<03> B(<03>#C<00>(B-<03>-C<00>0C <01>C<03>C z/ws/pic <00><00>\ # <00>[RU5IShv<01>N n[R5 SSS.q[
R S5 [RSU[R"5R5S.5IShv<01>N URSSS S
S .5IShv<01>N UR5IShv<01>N nURS S 5nUS :XGa<>URSS5nURS5nURS5nU(Ga<>U(Ga<>[S90UD6n[R!U5 [#S90UD6q[R'SS9n[)U5S:<3A>Ga<>[
R SS35 [
R SUS35 [
R S5 URSU[S[SSS.5IShv<01>N [*R-U[$S9IShv<01>N n U R.(aU R.SOSn
[1UU
U[$S9n U SU SS.qURS UU SU SU
(a U
R2OS![)U R.5U RS"S#5S$.5IShv<01>N [RS%UUU SU SS.U
(a$U
R2U
R4U
R6S&.OS[R"5R5S'.5IShv<01>N [
R SS35 O<>URSUSSS,[)U5S-3S.5IShv<01>N [RS%UUSSS.S[R"5R5S'.5IShv<01>N OT[
R?S05 O>US1:XaURS S205IShv<01>N OUS3:Xa[
R S45 OGMQ[RCU5 [R5 [
R S75 [RS8U[R"5R5S.5IShv<01>N gGNgGN<>GN<>GN<>GN<>GN<>GN<>GN<>![8aLn [
R;S(U 35 URS)US*[=U 53S+.5IShv<01>N Sn A N<>Sn A ff=fGN<>GNR![8aIn [
R;S.U 35 URS)[=U 5S/.5IShv<01>N Sn A GNISn A ff=fGNs![@a [
R S55 GNs[8a#n [
R;S6U 35 Sn A GN<>Sn A ff=fGN'![RCU5 [R5 [
R S75 [RS8U[R"5R5S.5IShv<01>N f=f7f):z<>
WebSocket endpoint for Raspberry Pi clients.
Flow:
1. Pi connects and streams lap telemetry via WebSocket
2. AI layer processes telemetry and generates strategies
3. AI layer pushes control commands back to Pi (brake_bias, differential_slip)
Nr!r"z7[WebSocket] Telemetry buffer cleared for new connection<6F>vehicle_connected)<03>type<70>
vehicle_id<EFBFBD> timestamp<6D>connection_establishedz"Connected to AI Intelligence Layer<65>readyT)r<>rar<00>buffer_clearedr<64><00> telemetry<72>
lap_numberrr<>r<>r<>r<>r<><00>
z<============================================================zLAP z - GENERATING STRATEGY<47>control_commandr#r$z8Processing strategies (maintaining previous settings)...)r<>r<>r#r$rar<>)r<><00>strategyr<79>r<><00>control_command_updatezN/A<> reasoning<6E>)r<>r<>r#r$<00> strategy_name<6D>total_strategiesr<73><00>lap_data)r<><00>
risk_level<EFBFBD>brief_description)r<>r<>r<><00>control_outputr<74>r<>z([WebSocket] Strategy generation failed: rIr<>)r<>r<>razCollecting data (z/3 laps)z([WebSocket] Error processing telemetry: )r<>raz,[WebSocket] Received incomplete data from Pir<69>r<>r@z#[WebSocket] Pi requested disconnectz"[WebSocket] Pi client disconnectedz[WebSocket] Unexpected error: z2[WebSocket] Telemetry buffer cleared on disconnect<63>vehicle_disconnectedrU)"<22>websocket_managerr<r<00>clearr%r8r9r<>rer<00>now<6F> isoformatrD<00> receive_json<6F>getrr<>rr r<>r:rr<>r<><00>generate_control_commandr<64>r<>r<>rHrIrS<00>warningrr@) r3r<>r<><00> message_typer<65><00>enriched<65>race_context_data<74> enriched_objr<6A>r<><00> top_strategyr<79>rKs r/<00>websocket_pi_endpointr<74>ss<><00><00><00>)<29>0<>0<><19>;<3B>;<3B>J<EFBFBD><15><1A><1A><1C>+,<2C>!<21>D<><18>
<EFBFBD>K<EFBFBD>K<EFBFBD>I<>J<> <1C>
%<25>
%<25>#<23> <20><1D>\<5C>\<5C>^<5E>-<2D>-<2D>/<2F>'<06> <07><07><07> j <0B><17>!<21>!<21>,<2C>;<3B><1D>"<22> #
<EFBFBD> <0B> <0B> <0B><13>"<22>/<2F>/<2F>1<>1<>D<EFBFBD><1F>8<EFBFBD>8<EFBFBD>F<EFBFBD>K<EFBFBD>8<>L<EFBFBD><1B>{<7B>*<2A>!<21>X<EFBFBD>X<EFBFBD>l<EFBFBD>A<EFBFBD>6<>
<EFBFBD> <20>8<EFBFBD>8<EFBFBD>$8<>9<><08>$(<28>H<EFBFBD>H<EFBFBD>^<5E>$<<3C>!<21><1B> 1<>t<1B>'?<3F>'K<>(<28>'K<> <0C>(<28>,<2C>,<2C>\<5C>:<3A>0;<3B>/O<>=N<>/O<>,<2C>'7<>&A<>&A<><02>&A<>&K<> <0B><1E>{<7B>+<2B>q<EFBFBD>0<>"<22>K<EFBFBD>K<EFBFBD>"<22>V<EFBFBD>H<EFBFBD> <0A>6<>"<22>K<EFBFBD>K<EFBFBD>$<24>z<EFBFBD>l<EFBFBD>:P<>(Q<>R<>"<22>K<EFBFBD>K<EFBFBD>6<EFBFBD>(<28>4<>#,<2C>"5<>"5<>(9<>'1<>.B<><<3C>.P<>5I<35>J]<5D>5^<5E>+e<> 7<1E>#<1F><1F><1F><#<23>1C<31>1L<31>1L<31>7B<37>1E<31>2M<01>2"<22>,"<22><08> JR<01>I\<5C>I\<5C>x<EFBFBD>/B<>/B<>1<EFBFBD>/E<>bf<62> <0C>3K<01>/9<>-9<>7C<37>1E<31> 3"<22><0F>3B<01>,<2C>2O<32>9H<39>I\<5C>9]<5D>8"<22> 4<> '0<>&9<>&9<>,D<>+5<>2A<32>,<2C>2O<32>9H<39>I\<5C>9]<5D>S_<53>\<5C>5O<35>5O<35>ej<65>8;<3B>H<EFBFBD><O<><O<>8P<38>1@<40>1D<31>1D<31>[<5B>RT<52>1U<31>;"<22>'#<23>!#<23>!#<23>'8<>&A<>&A<>,6<>2<<3C>08<30>6E<36>l<EFBFBD>6S<36>=L<>M`<60>=a<>7&<26>*6<>:F<01>9S<39>9S<39>6B<36>6M<36>6M<36>=I<>=[<5B>=[<5B>1&<26><@<01>19<31><1C><1C><1E>1I<31>1I<31>1K<31>C"<22>'#<23>!#<23>!#<23> !'<27> <0B> <0B>v<EFBFBD>h<EFBFBD>b<EFBFBD>M<EFBFBD> :<3A>#,<2C>"5<>"5<>(9<>'1<>./<2F>56<35>-><3E>s<EFBFBD>;<3B>?O<>>P<>PX<50>+Y<> 7<1E>#<1F><1F><1F>#4<>"=<3D>"=<3D>(2<>.8<EFBFBD>,4<>23<32>9:<3A>3"<22>-1<>-5<>\<5C>\<5C>^<5E>-E<>-E<>-G<>
?<1E>
#<1F>
<1F>
<1F>&<1B>N<EFBFBD>N<EFBFBD>%Q<>S<><1D><16>'<27><1F>)<29>)<29>6<EFBFBD>6<EFBFBD>*:<3A>;<3B>;<3B>;<3B><1D><1C>-<2D><16> <0B> <0B>A<>B<><15>_<13>l <1A>$<24>$<24>Y<EFBFBD>/<2F><18><1E><1E> <20><0E> <0B> <0B>H<>I<> <20>)<29>)<29>*<2A>$<24>!<21><1C><1C><1E>1<>1<>3<>+
<EFBFBD> <0B> <0B> <0B>q<<3C><07> <0B>2<>@<1F>,"<22>.!#<23>!#<23><>$$-<2D>#<23> &<26> <0C> <0C>/W<>XY<58>WZ<57>-[<5B> \<5C>&/<2F>&9<>&9<>,3<>+5<>1M<31>c<EFBFBD>RS<52>f<EFBFBD>X<EFBFBD>/V<>;"<22>'#<23>!#<23>!#<23><>#<23><><1F>
<1F><>%<25><1B><1E> <0C> <0C>'O<>PQ<50>s<EFBFBD>%S<>T<>'<27>1<>1<>$+<2B>'*<2A>1<EFBFBD>v<EFBFBD>3<1A><1B><1B><1B><><1B><><<3C><> <1F>:<3A><0E> <0B> <0B>8<>9<> <14>;<3B><0E> <0C> <0C>5<>a<EFBFBD>S<EFBFBD>9<>:<3A>:<3A><>;<3B><> <0B><> <1A>$<24>$<24>Y<EFBFBD>/<2F><18><1E><1E> <20><0E> <0B> <0B>H<>I<> <20>)<29>)<29>*<2A>$<24>!<21><1C><1C><1E>1<>1<>3<>+
<EFBFBD> <0B> <0B> <0B>s<EFBFBD><00>X,<01>R<04>A/X,<01> R<04> X,<01>U<00>*R<04>+U<00>R <04>A!U<00>&B=S9<00>#R<04>$S9<00>)R<00>R<04>BR<00>R<04>A8R<00>R<04>R<00>4U<00>5'S9<00>S3<04>AS9<00>$S6<04>%S9<00>)3U<00>U<04> U<00>=V&<00>>U<00>A;X,<01><V#<04>=X,<01>X,<01>U<00> U<00>S9<00>R<00>R<00>R<00>
S0<03>$<S+<03> S#<06>!S+<03>&S9<00>*U<00>+S0<03>0S9<00>6S9<00>9
U <03>8U<03>;T><06><U<03>U<00>U <03> U<00>V <03>1V&<00>4 V <03>=V<03>V&<00>V <03> V&<00>#X,<01>&A<X)<03>"X%<08>#X)<03>)X,r<>r<>r<>r<><00>returnc<00> <00>SnSn/nURS:<3A>a#SnURSURSS35 O<>URS:<3A>a#SnURS URSS
35 OSURS :a#S nURS URSS35 O URSURSS35 URS:<3A>a#SnURSURSS35 OYURS:XaSnURS5 O5URS:XaS nURS5 OURS5 URnU(aaUSUs=::a US::aNO OKUnUn [ US-S5n[ US-S5nURSUSSUSSUSUSU SU3 5 S R S!U55n
[RS"5 [RU
5 [RS#US$U35 U(af[RS%UR35 [RS&UR35 [RS'UR35 UUU
S(.$))a$
Generate control commands for Pi based on strategy and telemetry.
Returns brake_bias and differential_slip values (0-10) with reasoning.
Logic:
- Brake bias: Adjust based on tire degradation (higher deg = more rear bias)
- Differential slip: Adjust based on pace trend and tire cliff risk
r!gffffff<66>?<3F>zHigh tire degradation (z.2fu+) → Brake bias 7 (rear) to protect frontsg<73><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>zModerate tire degradation (u ) → Brake bias 6 (slight rear)g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>z Fresh tires (u-) → Brake bias 4 (front) for better turn-inzNormal tire degradation (u) → Brake bias 5 (neutral)zHigh tire cliff risk (u)) → Diff slip 7 (gentle tire treatment)<29> decliningu5Pace declining → Diff slip 6 (preserve performance)<29> improvingu7Pace improving → Diff slip 4 (aggressive, lower slip)u%Pace stable → Diff slip 5 (neutral)rr5r<>zIn pit window (laps <20>-u) → Conservative: brake u→z, diff r<>c3<00>,# <00>UH
nSU3v<00> M g7f)u • NrU)<02>.0<EFBFBD>parts r/<00> <genexpr><3E>+generate_control_command.<locals>.<genexpr>}s<00><00><00>K<>?<3F>4<EFBFBD><16><04>v<EFBFBD><EFBFBD>?<3F>s<00>zCONTROL DECISION REASONING:zFINAL COMMANDS: Brake Bias = z, Differential Slip = zTOP STRATEGY: z Risk Level: z Description: )r#r$r<>) <0C>tire_degradation_rater7<00>tire_cliff_risk<73>
pace_trend<EFBFBD>optimal_pit_window<6F>min<69>joinr8r9r<>r<>r<>) r<>r<>r<>r<>r#r$<00>reasoning_parts<74>
pit_window<EFBFBD> old_brake<6B>old_diff<66>reasoning_texts r/r<>r<>>s<00><00> <13>J<EFBFBD><19><15><18>O<EFBFBD><1A>/<2F>/<2F>#<23>5<><16>
<EFBFBD><17><1E><1E>!8<>9K<39>9a<39>9a<39>be<62>8f<38>gR<02> S<02> T<02> <1B> 1<> 1<>C<EFBFBD> 7<><16>
<EFBFBD><17><1E><1E>!<<3C>=O<>=e<>=e<>fi<66><j<>kK<02> L<02> M<02> <1B> 1<> 1<>C<EFBFBD> 7<><16>
<EFBFBD><17><1E><1E><1D>/A<>/W<>/W<>X[<5B>.\<5C>]J<02> K<02> L<02><17><1E><1E>!:<3A>;M<>;c<>;c<>dg<64>:h<>iE<02> F<02> G<02><1A>)<29>)<29>C<EFBFBD>/<2F><1D><19><17><1E><1E>!7<>8J<38>8Z<38>8Z<38>[^<5E>7_<37>`I<02> J<02> K<02> <1B> &<26> &<26>+<2B> 5<><1D><19><17><1E><1E>!V<>X<> <1B> &<26> &<26>+<2B> 5<><1D><19><17><1E><1E>!X<>Z<><17><1E><1E>!F<>H<>$<24>6<>6<>J<EFBFBD><11>j<EFBFBD><11>m<EFBFBD>z<EFBFBD>B<>Z<EFBFBD><01>]<5D>B<><1E> <09>$<24><08><18><1A>a<EFBFBD><1E><12>,<2C>
<EFBFBD><1F> 1<>A<EFBFBD> 5<>r<EFBFBD>:<3A><19><17><1E><1E>!5<>j<EFBFBD><11>m<EFBFBD>_<EFBFBD>A<EFBFBD>j<EFBFBD>QR<51>m<EFBFBD>_<EFBFBD>Tn<54>ox<6F>ny<6E>y|<7C>~H<02>}I<02>IP<02>QY<02>PZ<02>Z]<02>^o<02>]p<02> q<02> r<02><1A>Y<EFBFBD>Y<EFBFBD>K<>?<3F>K<>K<>N<EFBFBD> <0B>K<EFBFBD>K<EFBFBD>-<2D>/<2F>
<EFBFBD>K<EFBFBD>K<EFBFBD><0E><1F>
<EFBFBD>K<EFBFBD>K<EFBFBD>/<2F>
<EFBFBD>|<7C>;Q<>Rc<52>Qd<51>e<>f<><10><0E> <0B> <0B>n<EFBFBD>X<EFBFBD>%;<3B>%;<3B>$<<3C>=<3D>><3E><0E> <0B> <0B>n<EFBFBD>X<EFBFBD>%8<>%8<>$9<>:<3A>;<3B><0E> <0B> <0B>o<EFBFBD>h<EFBFBD>&@<40>&@<40>%A<>B<>C<>!<21>.<2E>#<23> <06>r2<00>__main__zmain:app)<03>host<73>port<72>reload)LrR<00>fastapirrrrr<00>fastapi.middleware.corsr<00>fastapi.staticfilesr <00>fastapi.responsesr <00>
contextlibr <00>logging<6E>asyncio<69>random<6F>typingr rrr<00>json<6F>configr<00>models.input_modelsrrrr<00>models.output_modelsrr<00>services.strategy_generatorr<00>services.telemetry_clientr<00>utils.telemetry_bufferr<00> basicConfig<69>INFO<46> getLoggerrNr8r<00>__annotations__rrr r%rS<00>intr'rWr<>r<>rmrg<00>add_middleware<72>mountr<74>rdr<><00>postr<74>r<>r3r<>r<>r<><00>uvicornrl<00>run<75>ai_service_hostrirUr2r/<00><module>rs<><00><01><04> S<01>R<>2<>+<2B>*<2A>*<2A><0E><0E> <0A>"<22>"<22><1D> <0B><1F><02><02><02>
2025-10-18 23:56:53 -05:00
:<3A>5<>2<><08><13><13>
2025-10-18 22:36:20 -05:00
<11>,<2C>,<2C> A<><02>
<11> <1A> <1A>8<EFBFBD> $<24><06>%)<29><10>/<2F>(<28>(,<2C><12>%<25>,<2C>$(<28><10>/<2F>(<28>$(<28><14>k<EFBFBD>(<28>67<36>a<EFBFBD>'P<><14>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>P<>C<01>C<01><'<27>'<27><&<26>'<27><11>$<24>&<26><11><15>7<><07>7<><15>7<>0<0E>
$<24>Y<> <13> <15> <02><03><04><12><12><12><16>%<25><1A><16>%<25><16>%<25> <13><02><04> <09> <09>)<29>[<5B>8<EFBFBD>4<>8<EFBFBD> <09>D<><05><17><17><13><1C>1<><0E>1<>
<05><17><17><1D>~<7E><17>6<> <06>7<> <06><05><18><18>
<20>!<21>>
<EFBFBD>*F<>>
<EFBFBD>"<22>>
<EFBFBD>B<05><18><18>
2025-10-18 22:36:20 -05:00
$<24>5G<35><18>H<>+
<EFBFBD>):<3A>+
<EFBFBD>I<01>+
<EFBFBD>`/<04>d<05><1D><1D><EFBFBD><1F>0<>)<29>0<> <20>0<>.<05><1D><1D>x<EFBFBD><18>G <0B>9<EFBFBD>G <0B><19>G <0B>TP<06><13>P<06><11>P<06>1<>P<06><1E> P<06>

<EFBFBD>#<23>s<EFBFBD>(<28>^<5E> P<06>f <0C>z<EFBFBD><19><12><1B>~<7E>H<EFBFBD> <0B>K<EFBFBD>K<EFBFBD><12> <15> %<25> %<25> <15> %<25> %<25><13> <06>r2