File size: 3,597 Bytes
ad88099
 
 
 
3b49d05
ad88099
3b49d05
0e5c361
3b49d05
 
ad88099
 
 
423cbd4
3b49d05
 
 
423cbd4
 
 
 
 
 
 
3b49d05
 
 
0e5c361
c1b6204
ad88099
 
 
0e5c361
ad88099
0e5c361
ad65ad1
ad88099
 
 
0e5c361
ad88099
 
 
 
3b49d05
ad88099
 
 
 
3b49d05
423cbd4
ad88099
 
 
 
 
3b49d05
 
 
ad88099
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b367859
ad88099
 
 
 
 
 
 
3b49d05
ad88099
3b49d05
 
423cbd4
ad88099
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e5c361
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import os
import json
import time
import traceback
from dotenv import load_dotenv

from langfuse import Langfuse
from langchain_google_genai import ChatGoogleGenerativeAI
from langfuse.callback import CallbackHandler
from langchain_core.prompts import PromptTemplate

load_dotenv()

langfuse_news_analysis_handler = CallbackHandler(
    secret_key=os.getenv("LANGFUSE_SECRET_KEY"),
    public_key=os.getenv("LANGFUSE_PUBLIC_KEY"),
    host="https://cloud.langfuse.com", # πŸ‡ͺπŸ‡Ί EU region
    session_id="news_analysis",
)
langfuse_post_generation_handler = CallbackHandler(
    secret_key=os.getenv("LANGFUSE_SECRET_KEY"),
    public_key=os.getenv("LANGFUSE_PUBLIC_KEY"),
    host="https://cloud.langfuse.com", # πŸ‡ͺπŸ‡Ί EU region
    session_id="post_generation",
)
langfuse = Langfuse()

analysis_llm = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash-lite",
    temperature=0.8,
    timeout=None,
    max_retries=2,
    api_key=os.getenv("GOOGLE_API_KEY"),
)
post_content_llm = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash-lite",
    temperature=0.8,
    timeout=None,
    max_retries=2,
    api_key=os.getenv("GOOGLE_POST_GENERATION_API_KEY"),
)

    
def basic_analysis(news):
    prompt = langfuse.get_prompt("news_selector")

    for _ in range(5):
        try:
            response = analysis_llm.invoke(
                prompt.compile(news_object = news), 
                config={"callbacks": [langfuse_news_analysis_handler]}
            )
            print("################ BASIC ANALYSIS AGENT RESPONSE ################")
            print(response.content)
            print("################ BASIC ANALYSIS END AGENT RESPONSE ################")

            if "</think>" in response.content:
                response.content = response.content.split("</think>")[1]

            start_index = response.content.find("{")
            end_index = response.content.rfind("}")

            print("start index:", start_index)
            print("end index:", end_index)

            abstracted_string = ""
            if start_index != -1 and end_index != -1 and start_index < end_index:
                abstracted_string = response.content[start_index : end_index + 1]

                try:
                    results = json.loads(abstracted_string)
                    print(results)
                    return results
                except Exception as e:
                    print(e)
                    traceback.print_exc()
        except Exception as e:
            print(e)
            traceback.print_exc()
            time.sleep(30)

    return {"error": "LLM response is not in correct format."}

def get_text_post_content(details, reference):
    try:
        prompt = PromptTemplate.from_file(
            template_file="prompts/post_generator_without_source.yml",
            input_variables=["NEWS_CONTENT", "CHAR_LENGTH"],
        )
        prompt = langfuse.get_prompt("post_generator")


        user_query = prompt.compile(NEWS_CONTENT = details, CHAR_LENGTH = 490- len(reference))
        response = post_content_llm.invoke(user_query, config={"callbacks": [langfuse_post_generation_handler]})

        print("POST CONTENT RESPONSE:", response)
        
        content = response.content.replace('"', '')

        if "</think>" in content:
            content = content.split("</think>")[1]

        start_indx = content.find("#")
        content = f"""{content[:start_indx]}
{reference}

{content[start_indx:]}"""
        
        return content, True
    except Exception as e:
        print(e)
        traceback.print_exc()
        return "", False