File size: 5,455 Bytes
77726b9 9b5b26a c19d193 6aae614 a2ca67f 77726b9 9b5b26a 265fd7f 5567345 265fd7f d4e9d67 77726b9 d4e9d67 265fd7f 5567345 9b5b26a 265fd7f 9b5b26a d4e9d67 77726b9 d4e9d67 9b5b26a 265fd7f 9b5b26a 265fd7f 9b5b26a 8c01ffb 5567345 77726b9 5567345 77726b9 5567345 d4e9d67 5567345 d4e9d67 5567345 6aae614 ae7a494 e121372 d4e9d67 5567345 265fd7f 13d500a 8c01ffb 861422e 265fd7f 5567345 8c01ffb 8fe992b 265fd7f a2ca67f 5567345 265fd7f 5567345 8c01ffb 5567345 8fe992b 8c01ffb |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from tools.blog_tools import generate_blog_section, improve_writing_style, check_readability, generate_seo_metadata
from tools.search_tools import get_search_tool
from Gradio_UI import GradioUI
@tool
def generate_blog_outline(topic: str) -> str:
"""Creates a structured outline for a blog post with a direct, practical approach
Args:
topic: The main topic for the blog post
"""
try:
# Research the topic first
search_tool = get_search_tool(max_results=2)
research = search_tool.forward(f"{topic} key aspects challenges solutions")
# Create an outline based on research and expertise
outline = f"# Blog Outline: {topic}\n\n"
outline += "## 1. Introduction\n"
outline += "- Context and why this matters\n"
outline += "- My experience with this topic\n\n"
outline += "## 2. Current State\n"
outline += "- Key developments\n"
outline += "- Market trends\n\n"
outline += "## 3. Practical Insights\n"
outline += "- Real-world applications\n"
outline += "- Lessons from implementation\n\n"
outline += "## 4. Looking Forward\n"
outline += "- Next steps\n"
outline += "- Recommendations\n\n"
outline += "## 5. Key Takeaways\n"
outline += "- Action items\n"
outline += "- Discussion points\n"
return outline
except Exception as e:
return f"Error generating outline: {str(e)}"
@tool
def suggest_blog_topics(main_theme: str) -> str:
"""Suggests related blog topics based on a theme, drawing from AI product expertise
Args:
main_theme: The primary theme or area of interest
"""
try:
# Research current trends
search_tool = get_search_tool(max_results=2)
research = search_tool.forward(f"{main_theme} latest developments challenges")
# Generate topic suggestions based on research and expertise
suggestions = f"# Blog Topic Ideas: {main_theme}\n\n"
suggestions += "Based on current trends and my product experience:\n\n"
suggestions += "1. Practical Implementation:\n"
suggestions += " - Building scalable {main_theme} solutions\n"
suggestions += " - Real-world challenges and solutions\n\n"
suggestions += "2. Product Strategy:\n"
suggestions += " - Market fit and user needs\n"
suggestions += " - Integration approaches\n\n"
suggestions += "3. Future Outlook:\n"
suggestions += " - Emerging trends\n"
suggestions += " - Potential impact\n\n"
suggestions += "\nThese topics combine current research with hands-on insights."
return suggestions
except Exception as e:
return f"Error suggesting topics: {str(e)}"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""Fetches current local time in specified timezone
Args:
timezone: Valid timezone (e.g., 'America/New_York')
"""
try:
tz = pytz.timezone(timezone)
local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
return f"The current local time in {timezone} is: {local_time}"
except Exception as e:
return f"Error fetching time for timezone '{timezone}': {str(e)}"
@tool
def research_topic(query: str) -> str:
"""Searches the web for information about a specific topic and returns relevant sources
Args:
query: The topic to research
"""
try:
# Create a fresh instance for each search
search_tool = get_search_tool(max_results=3)
# Add focus on tech and AI product development
enhanced_query = f"{query} AI product development"
results = search_tool.forward(enhanced_query)
# Format the results in your style
response = f"Quick research on {query}:\n\n"
response += results
response += "\n\nNote: Always verify current info."
return response
except Exception as e:
return f"Error performing research: {str(e)}"
final_answer = FinalAnswerTool()
model = HfApiModel(
max_tokens=1000, # Reduced from 2096 to stay within limits
temperature=0.7, # Slightly increased for more natural, conversational tone
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
with open("style_guide.yaml", 'r') as stream:
style_guide = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[
final_answer,
generate_blog_outline,
suggest_blog_topics,
get_current_time_in_timezone,
generate_blog_section,
improve_writing_style,
check_readability,
generate_seo_metadata,
research_topic
],
max_steps=15,
verbosity_level=1,
grammar=None,
planning_interval=None,
name="Joséphine's Blog Assistant",
description="""An AI writing assistant that matches Joséphine's style:
- Direct and conversational tone
- Product and AI expertise focus
- Clear, practical insights
- Natural, professional voice
- Gets to the point quickly"""
)
GradioUI(agent).launch() |