from smolagents import tool from typing import List, Dict import re import yaml from .search_tools import get_search_tool # Load style guide with open("style_guide.yaml", 'r') as f: style_guide = yaml.safe_load(f) @tool def generate_blog_section(topic: str, section_title: str) -> str: """Generates content for a specific section of the blog post, following Joséphine's style: - Direct and conversational tone - Short, clear sentences - Personal but professional - Draws from AI product experience when relevant Args: topic: The main topic of the blog post section_title: The title of the section to generate """ # First, get some background information search_tool = get_search_tool(max_results=2) try: search_query = f"{topic} {section_title}" research = search_tool.forward(search_query) # Format the content in your style content = f"# {section_title}\n\n" content += f"Here's my take on {topic}, focusing on {section_title}. " content += f"From my experience in AI products:\n\n" content += f"{research}\n\n" content += "Questions? Let's discuss." return content except Exception as e: return f"Error generating content: {str(e)}" @tool def improve_writing_style(text: str, style: str = "professional") -> str: """Improves the writing style while maintaining Joséphine's voice: - Keeps direct, conversational tone - Removes AI clichés - Ensures natural flow - Maintains authenticity Args: text: The text to improve style: The desired writing style (e.g., professional, casual, academic) """ return f"Improved version of the text in {style} style" @tool def check_readability(text: str) -> Dict: """Analyzes the readability of the text, focusing on: - Sentence length and clarity - Natural flow - Direct communication - Professional but personal tone Args: text: The text to analyze """ words = len(text.split()) sentences = len(re.split(r'[.!?]+', text)) avg_words_per_sentence = words / max(sentences, 1) return { "word_count": words, "sentence_count": sentences, "avg_words_per_sentence": avg_words_per_sentence, "readability_score": "Good" if avg_words_per_sentence < 15 else "Consider shorter sentences", "style_notes": "Check for direct tone and clear communication" } @tool def generate_seo_metadata(title: str, content: str) -> Dict: """Generates SEO metadata while maintaining authentic voice Args: title: The blog post title content: The blog post content """ return { "meta_description": f"A practical look at {title}", "keywords": [word.lower() for word in title.split()], "suggested_title_tags": [f"

{title}

"] }