Advertisement
jarekmor

generator_email_oferta

Oct 20th, 2024
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.88 KB | None | 0 0
  1. from dotenv import load_dotenv
  2. from langchain_core.output_parsers import JsonOutputParser
  3. from langchain_core.prompts import PromptTemplate
  4. from langchain_openai import ChatOpenAI
  5. from pydantic import BaseModel, Field
  6.  
  7. load_dotenv()
  8.  
  9. # Define your desired data structure.
  10. class Oferta(BaseModel):
  11.     apartment_number: str = Field(description="Apartment number, format similar to '7-13-B074'")
  12.     floor: int = Field(description="Floor number where the apartment is located")
  13.     building_number: int = Field(description="Building number in the development project")
  14.     developer: str = Field(description="Name of the developer")
  15.     location: str = Field(description="General location or address of the development")
  16.     amenities: list[str] = Field(description="List of amenities available in the development, e.g., playgrounds, gym, picnic areas")
  17.     public_transport: str = Field(description="Proximity to public transportation, such as bus stops or train stations")
  18.     price: float = Field(description="Total price of the apartment in PLN")
  19.     price_per_sqm: float = Field(description="Price per square meter of the apartment in PLN")
  20.     full_address: str = Field(description="Full address including street, district, city, and region")
  21.     additional_info: str = Field(description="Additional information about the development, such as surrounding attractions or points of interest")
  22.  
  23. # And a query intended to prompt a language model to populate the data structure.
  24. description_query = """Extract key information about the real estate offer:
  25.  
  26. Opis:
  27.    3-pokojowe mieszkanie numer 7-13-B074 na 4. piętrze w budynku 13 w Inwestycji Miasto Moje Dewelopera RONSON DEVELOPMENT
  28.    Zatoka Relaksu: hamaki, leżaki, strefa piknikowa z grillem
  29.    Zatoka Kultury: kino letnie, amfiteatr
  30.    Zatoka Aktywności: siłownia plenerowa, ścieżka rekreacyjna
  31.    Zatoka Zabawy: 12 placów zabaw i plac gier
  32.    Pasaż handlowy, restauracje i kawiarnie na terenie osiedla
  33.    Stacja SKM "Warszawa Żerań" (14 minut spacerem)
  34.    Przystanek autobusowy (1 minuta spacerem)
  35.  
  36. Miasto Moje - poznaj inwestycję
  37. Inwestycja Miasto Moje to samowystarczalne osiedle zlokalizowane na Białołęce przy ulicy Marywilskiej. Mieszkania dostępne w ofercie mają zróżnicowane metraże oraz komfortowe przestrzenie dodatkowe takie jak loggie, balkony, tarasy i ogródki oraz posiadają możliwość wykończenia pod klucz, co z pewnością będzie wygodne dla wielu zabieganych właścicieli.
  38. Miasto Moje to miejsce wyjątkowe ze względu na zaaranżowaną przestrzeń wspólną dla mieszkańców, w której znajdą się całoroczne, funkcjonalne atrakcje. Na terenie inwestycji usytuowano Pasaż Wisła z dostępnymi punktami usługowymi takimi jak restauracje czy kawiarnie oraz zatoki, czyli strefy skupiające się na konkretnych aktywnościach.
  39. Zatoka relaksu to miejsce dedykowane sąsiedzkiej integracji, w czym sprzyja strefa z grillem, plac miejski, ścieżka rekreacyjna i wygodne leżaki oraz hamaki. Zatoka zabawy wyróżnia się licznymi miejscami do pobudzania wyobraźni – zrealizowano tam liczne place zabaw, place gier, żłobek, tematyczne przedszkole, trampoliny, statek piracki, piaskownice i fontanny w zielonym otoczeniu.
  40. Zatoka aktywności to miejsce dla osób z zamiłowaniem do sportu, zaprojektowano w niej mi.in. siłownie plenerowe, wielofunkcyjne boisko i obszary sprzyjające gimnastyce i joggingowi. Zatoka kultury sprawdzi się dla każdego, kto ceni letnie kino, literaturę, czy amfiteatr. Dla entuzjastów klimatycznych świąt przygotowano również plac świąteczny z ogromną choinką.
  41. Miasto Moje poza świetnie zaaranżowanymi terenami osiedla, wyróżnia się także komfortową lokalizacją, która zapewnia łatwy dojazd do centrum.
  42. Miasto Moje - lokalizacja
  43. W pobliżu stacji SKM "Warszawa Żerań",
  44. ul. Marywilska 60
  45.    10,1 km do centrum
  46.    2 min. spacerem do przystanku autobusowego
  47.    9 min. spacerem do stacji kolejowej
  48.    9 min. spacerem do stacji SKM
  49.    dojazd do centrum: 19 min samochodem
  50.  
  51. Istotne punkty w okolicy inwestycji
  52.    Przystanek autobusowy (110 m, 2 minuty spacerem)
  53.    Piekarnia (166 m, 3 minuty spacerem)
  54.    Sklep: Żabka (189 m, 3 minuty spacerem)
  55.    Sklep: Carrefour (230 m, 3 minuty spacerem)
  56.    Restauracja (673 m, 9 minut spacerem)
  57.    Stacja kolejowa (687 m, 9 minut spacerem)
  58.    Stacja SKM (687 m, 9 minut spacerem)
  59.  
  60. Cena nieruchmości wynosi 771 840 zł, czyli 12 918 zł/m².
  61. Mieszkanie zlokalizowane jest przy ul. Marywilska 60, w dzielnicy Żerań na Białołęce w Warszawie."""
  62.  
  63. # Set up a parser + inject instructions into the prompt template.
  64. parser = JsonOutputParser(pydantic_object=Oferta)
  65.  
  66. prompt = PromptTemplate(
  67.     template="Answer the user query by extracting entities from the description and populating the data structure.\n{format_instructions}\n{query}\n",
  68.     input_variables=["query"],
  69.     partial_variables={"format_instructions": parser.get_format_instructions()},
  70. )
  71.  
  72. # Set up the model
  73. model = ChatOpenAI(model="gpt-4o-mini")
  74.  
  75. # Chain the components: prompt, model, and parser
  76. chain = prompt | model | parser
  77.  
  78. # Invoke the chain with the provided description
  79. oferta_json_output  = chain.invoke({"query": description_query})
  80.  
  81. def prepare_email(oferta_data):
  82.     # Extract data from the JSON output
  83.     apartment_number = oferta_data.get('apartment_number', 'N/A')
  84.     floor = oferta_data.get('floor', 'N/A')
  85.     building_number = oferta_data.get('building_number', 'N/A')
  86.     developer = oferta_data.get('developer', 'N/A')
  87.     location = oferta_data.get('location', 'N/A')
  88.     amenities = ", ".join(oferta_data.get('amenities', []))
  89.     public_transport = oferta_data.get('public_transport', 'N/A')
  90.     price = oferta_data.get('price', 'N/A')
  91.     price_per_sqm = oferta_data.get('price_per_sqm', 'N/A')
  92.     full_address = oferta_data.get('full_address', 'N/A')
  93.     additional_info = oferta_data.get('additional_info', 'N/A')
  94.  
  95.     # Format the email content
  96.     email_content = f"""
  97.    Dear Customer,
  98.  
  99.    We are pleased to introduce you to an exceptional real estate offer in our latest development, {developer}.
  100.  
  101.    The apartment details are as follows:
  102.    - Apartment Number: {apartment_number}
  103.    - Located on Floor: {floor}, in Building: {building_number}
  104.    - Full Address: {full_address}
  105.    - Price: {price} PLN (equivalent to {price_per_sqm} PLN per square meter)
  106.  
  107.    This apartment is part of the '{location}' project, which offers a range of outstanding amenities for your convenience and enjoyment.
  108.    Some of the key features include:
  109.    {amenities}
  110.  
  111.    The project also boasts excellent public transportation options with {public_transport}, ensuring easy access to and from the city center.
  112.  
  113.    Additional information:
  114.    {additional_info}
  115.  
  116.    We believe this property offers a unique opportunity for you to enjoy comfortable and modern living in a well-connected and vibrant neighborhood.
  117.  
  118.    If you are interested or have any further questions, please do not hesitate to contact us. We would be more than happy to provide additional information or arrange a visit.
  119.  
  120.    Best regards,
  121.    [Your Name]
  122.    Sales Department
  123.    {developer}
  124.    """
  125.  
  126.     return email_content
  127.  
  128. # Prepare the email
  129. email = prepare_email(oferta_json_output)
  130. print(email)
  131.  
  132. ############################## email do klienta ############################
  133.   email = """Dear Customer,
  134.  
  135.    We are pleased to introduce you to an exceptional real estate offer in our latest development, RONSON DEVELOPMENT.
  136.  
  137.    The apartment details are as follows:
  138.    - Apartment Number: 7-13-B074
  139.    - Located on Floor: 4, in Building: 13
  140.    - Full Address: ul. Marywilska 60, Żerań, Białołęka, Warszawa
  141.    - Price: 771840 PLN (equivalent to 12918 PLN per square meter)
  142.  
  143.    This apartment is part of the 'Białołęka, ul. Marywilska 60, Warszawa' project, which offers a range of outstanding amenities for your convenience and enjoyment.
  144.    Some of the key features include:
  145.    hamaki, leżaki, strefa piknikowa z grillem, kino letnie, amfiteatr, siłownia plenerowa, ścieżka rekreacyjna, 12 placów zabaw, plac gier, pasaż handlowy, restauracje, kawiarnie
  146.  
  147.    The project also boasts excellent public transportation options with Stacja SKM 'Warszawa Żerań' (14 minut spacerem), Przystanek autobusowy (1 minuta spacerem), ensuring easy access to and from the city center.
  148.  
  149.    Additional information:
  150.    Miasto Moje to samowystarczalne osiedle z miejscami do integracji, sportu i kultury, blisko centrum Warszawy.
  151.  
  152.    We believe this property offers a unique opportunity for you to enjoy comfortable and modern living in a well-connected and vibrant neighborhood.
  153.  
  154.    If you are interested or have any further questions, please do not hesitate to contact us. We would be more than happy to provide additional information or arrange a visit.
  155.  
  156.    Best regards,
  157.    [Your Name]
  158.    Sales Department
  159.    RONSON DEVELOPMENT"""
  160.    
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement