Ë
    æ ,jÞ  ã                  óè   — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	  ej                  e«      Zdddd	d
ddœddgddœddgddœddgddœddgddœddgddœdddiddœdddœdœg d¢ddœdœZdZdd„Zy) zTLLM-based extraction of PartQuery using OpenAI structured output (function calling).é    )ÚannotationsN)ÚSettings)Ú	PartQueryÚPostÚextract_part_queryu?   WyciÄ…gnij z posta informacje o szukanej czÄ™Å›ci samochodowej.TÚobjectÚbooleanuC   Czy post jest zapytaniem o czÄ™Å›Ä‡ samochodowÄ… (kupno, szukanie).)ÚtypeÚdescriptionÚstringÚnulluB   Marka pojazdu (np. VOLVO, OPEL, MAN). Null jeÅ›li brak w tekÅ›cie.u9   Model pojazdu (np. FH13, Astra F, TGA). Null jeÅ›li brak.u4   Rocznik pojazdu (np. 2015, 98-03). Null jeÅ›li brak.uB   Kategoria czÄ™Å›ci (np. pompa wody, alternator, klocki hamulcowe).u8   Kod silnika (np. C18NZ, D13A, N47D20). Null jeÅ›li brak.Úarrayr
   u7   Numery OE/katalogowe z tekstu. Pusta lista jeÅ›li brak.)r
   Úitemsr   u/   KrÃ³tkie uzasadnienie klasyfikacji (do audytu).)Úis_part_requestÚbrandÚmodelÚyearÚcategoryÚengine_codeÚ
oe_numbersÚreasonF)r
   Ú
propertiesÚrequiredÚadditionalProperties)Únamer   ÚstrictÚ
parametersu  JesteÅ› ekspertem od identyfikacji zapytaÅ„ o czÄ™Å›ci samochodowe w postach z grup na Facebooku.

Twoje zadanie:
1. Ustal czy post jest zapytaniem kupujÄ…cego o czÄ™Å›Ä‡ samochodowÄ… (is_part_request).
2. JeÅ›li tak â€” wyciÄ…gnij z tekstu: markÄ™, model, rocznik, kategoriÄ™ czÄ™Å›ci, kod silnika, numery OE/katalogowe.
3. JeÅ›li czegoÅ› nie ma w tekÅ›cie â€” daj null (NIE zgaduj).

Rozpoznajesz polski slang motoryzacyjny:
- "strucla" = Opel Astra
- "bumer"/"bemka" = BMW
- "merc" = Mercedes
- "klocki" = klocki hamulcowe
- "turbo"/"turbinka" = turbosprÄ™Å¼arka

Posty sprzedaÅ¼owe (sprzedam, oddam) to NIE jest zapytanie â€” is_part_request = false.
Posty z pytaniami ogÃ³lnymi, off-topic â€” is_part_request = false.

Zawsze odpowiadaj wywoÅ‚ujÄ…c funkcjÄ™ extract_part_query.c                óh  — t        j                  |j                  ¬«      }|j                  j                  j                  |j                  ddt        dœdd| j                  › d| j                  › �dœgdt        d	œgdd
did	œ¬«      }|j                  d   j                  }|j                  rÏddl}|j                  |j                  d   j                   j"                  «      }t%        |j'                  dd«      | j                  |j'                  d«      |j'                  d«      |j'                  d«      |j'                  d«      |j'                  d«      |j'                  dg «      |j'                  dd«      ¬«	      S t(        j+                  d| j,                  «       t%        d| j                  d¬«      S )zBUse OpenAI function calling to extract a PartQuery from post text.)Úapi_keyi   Úsystem)ÚroleÚcontentÚuserzPost z grupy 'z':

Úfunction)r
   r$   r   r   )r   Úmax_completion_tokensÚmessagesÚtoolsÚtool_choicer   Nr   Fr   r   r   r   r   r   r   Ú )	r   Úraw_textr   r   r   r   r   r   r   z/OpenAI did not return function call for post %sz'OpenAI did not return structured output)r   r*   r   )ÚopenaiÚOpenAIÚllm_api_keyÚchatÚcompletionsÚcreateÚ	llm_modelÚ_SYSTEM_PROMPTÚgroupÚtextÚ_EXTRACT_FUNCTIONÚchoicesÚmessageÚ
tool_callsÚjsonÚloadsr$   Ú	argumentsr   ÚgetÚloggerÚwarningÚpost_id)ÚpostÚsettingsÚclientÚresponser7   r9   Údatas          úT/var/www/html/agent.samochodowy/src/agent_samochodowy/extraction/openai_extractor.pyÚextract_with_openairF   T   sz  € ä�]‰] 8×#7Ñ#7Ô8€Fà�{‰{×&Ñ&×-Ñ-Ø× Ñ Ø!à¬.Ñ9Ø¨.¸¿¹¸ÀFÈ4Ï9É9È+Ð(VÑWð
ð #Ô0AÑBÐCØ'°fÐ>RÐ5SÑTð .ó 	€Hð ×Ñ˜qÑ!×)Ñ)€GØ×ÒÛà�z‰z˜'×,Ñ,¨QÑ/×8Ñ8×BÑBÓCˆÜØ ŸH™HÐ%6¸Ó>Ø—Y‘YØ—(‘(˜7Ó#Ø—(‘(˜7Ó#Ø—‘˜&Ó!Ø—X‘X˜jÓ)ØŸ™ Ó/Ø—x‘x ¨bÓ1Ø—8‘8˜H bÓ)ô

ð 
	
ô ‡N�NÐDÀdÇlÁlÔSÜØØ—‘Ø8ôð ó    )r@   r   rA   r   Úreturnr   )Ú__doc__Ú
__future__r   Úloggingr+   Úagent_samochodowy.configr   Úagent_samochodowy.modelsr   r   Ú	getLoggerÚ__name__r=   r5   r2   rF   © rG   rE   ú<module>rQ      së   ðÙ Zå "ã ã å -ß 4à	ˆ×	Ñ	˜8Ó	$€ð !ØTØàð "Ødñ ð
 " 6Ð*Øcñð
 " 6Ð*ØZñð
 " 6Ð*ØUñð
 " 6Ð*Øcñð
 " 6Ð*ØYñð
  Ø  (Ð+ØXñð !ØPññ="
òF
ð !&ñS*ñ	/Ð ðb>€ô(&rG   