Spaces:
Running
Running
| import json | |
| from typing import Dict, Any, Optional | |
| from tinytroupe.agent import TinyPerson | |
| from tinytroupe.agent.social_types import Content, Reaction | |
| import tinytroupe.openai_utils as openai_utils | |
| class LLMPredictor: | |
| """Use LLM reasoning for engagement prediction""" | |
| def __init__(self, model: str = "gpt-4"): | |
| self.model = model | |
| def predict(self, persona: TinyPerson, content: Content) -> Reaction: | |
| """Use LLM to predict engagement""" | |
| prompt = f""" | |
| You are predicting how a specific persona will react to content on a professional social network. | |
| PERSONA PROFILE: | |
| Name: {persona.name} | |
| Bio: {persona.minibio()} | |
| CONTENT TO EVALUATE: | |
| {content.text} | |
| TASK: | |
| Analyze whether this persona would engage with this content. | |
| Provide your prediction in JSON format: | |
| {{ | |
| "will_engage": true/false, | |
| "probability": 0.0-1.0, | |
| "reasoning": "detailed explanation", | |
| "reaction_type": "like|comment|share|none", | |
| "comment": "predicted comment text if applicable" | |
| }} | |
| """ | |
| response = openai_utils.client().send_message( | |
| [ | |
| {"role": "system", "content": "You are an expert in social psychology and behavioral prediction."}, | |
| {"role": "user", "content": prompt} | |
| ], | |
| temperature=0.3, | |
| response_format={"type": "json_object"} | |
| ) | |
| prediction = json.loads(response["content"]) | |
| return Reaction( | |
| will_engage=prediction["will_engage"], | |
| probability=prediction["probability"], | |
| reasoning=prediction["reasoning"], | |
| reaction_type=prediction["reaction_type"], | |
| comment=prediction.get("comment") | |
| ) | |