first commit
This commit is contained in:
68
agent.py
Normal file
68
agent.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from pydantic_ai import Agent
|
||||
from pydantic_ai.models.ollama import OllamaModel
|
||||
from pydantic_ai.providers.ollama import OllamaProvider
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
import json
|
||||
from prompts import OPPORTUNITY_PROMPT, EVENT_PROMPT
|
||||
|
||||
load_dotenv()
|
||||
|
||||
ollama_url = os.getenv("OLLAMA_BASE_URL")
|
||||
|
||||
prov = OllamaProvider(base_url=ollama_url)
|
||||
|
||||
# Use qwen2.5:3b or phi4-mini for low-end hardware (RAM < 8GB)
|
||||
model = OllamaModel(
|
||||
model_name='granite4.1:8b',
|
||||
provider=prov
|
||||
)
|
||||
|
||||
# --- OPPORTUNITY AGENT ---
|
||||
opportunity_agent = Agent(
|
||||
model,
|
||||
output_type=str,
|
||||
system_prompt=OPPORTUNITY_PROMPT,
|
||||
retries=5
|
||||
)
|
||||
|
||||
# --- EVENT AGENT ---
|
||||
event_agent = Agent(
|
||||
model,
|
||||
output_type=str,
|
||||
system_prompt=EVENT_PROMPT,
|
||||
retries=5
|
||||
)
|
||||
|
||||
async def parse_page(content: str, entry_type: str = "opportunity"):
|
||||
"""
|
||||
Parse content and extract entry data based on type.
|
||||
|
||||
Args:
|
||||
content: The raw text content to parse
|
||||
entry_type: Either 'opportunity' or 'event'
|
||||
"""
|
||||
# Select the appropriate agent
|
||||
agent = opportunity_agent if entry_type == "opportunity" else event_agent
|
||||
|
||||
# 1. Run the agent (which returns a string)
|
||||
print(f"Parsing {entry_type}...")
|
||||
print(content)
|
||||
result = await agent.run(content)
|
||||
raw_text = result.output
|
||||
print(raw_text)
|
||||
|
||||
# 2. Clean the string
|
||||
# We remove the markdown decorators so json.loads doesn't crash
|
||||
clean_json = raw_text.replace("```json", "").replace("```", "").strip()
|
||||
|
||||
try:
|
||||
# 3. Convert string to a dictionary
|
||||
data_dict = json.loads(clean_json)
|
||||
|
||||
# 4. Success! return the dictionary to main.py
|
||||
return data_dict
|
||||
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Critical Error: The AI sent invalid JSON. Text was: {raw_text}")
|
||||
raise e
|
||||
Reference in New Issue
Block a user