diff --git a/docs/cookbooks/operations/content-writing.mdx b/docs/cookbooks/operations/content-writing.mdx index ae812e9fc..dcbd7af6e 100644 --- a/docs/cookbooks/operations/content-writing.mdx +++ b/docs/cookbooks/operations/content-writing.mdx @@ -16,6 +16,8 @@ Integrating Mem0 into your writing workflow helps you: ## Setup + + ```python import os from openai import OpenAI @@ -32,13 +34,81 @@ openai = OpenAI() USER_ID = "content_writer" RUN_ID = "smart_editing_session" ``` + + +Here we use **Mem0 open source** (`Memory`): all local, no API keys needed for memory. Vectors in **Qdrant**, LLM and embeddings via **Ollama**. The **OpenAI** Python SDK calls Ollama's **OpenAI-compatible** `/v1` endpoint for content rewriting. + +### Installation + +Install the required dependencies: + +```bash +pip install mem0ai qdrant-client openai ollama +``` + +Then start Qdrant and pull the Ollama models: + +```bash +docker run -d -p 6333:6333 qdrant/qdrant +ollama pull llama3.1:latest +ollama pull nomic-embed-text:latest +``` + +You can swap `nomic-embed-text` for any Ollama-supported embedding model (e.g., `snowflake-arctic-embed`, `mxbai-embed-large`). Just update the `model` in the `embedder` config and set `embedding_model_dims` in the Qdrant config to match the model's output dimensions (768 for `nomic-embed-text`). + +```python +from openai import OpenAI +from mem0 import Memory + +OLLAMA_URL = "http://localhost:11434" +CHAT_MODEL = "llama3.1:latest" + +# Set up Mem0 with local providers +memory = Memory.from_config({ + "vector_store": { + "provider": "qdrant", + "config": { + "collection_name": "content_writing", + "host": "localhost", + "port": 6333, + "embedding_model_dims": 768, + }, + }, + "llm": { + "provider": "ollama", + "config": { + "model": CHAT_MODEL, + "temperature": 0, + "max_tokens": 2000, + "ollama_base_url": OLLAMA_URL, + }, + }, + "embedder": { + "provider": "ollama", + "config": { + "model": "nomic-embed-text:latest", + "ollama_base_url": OLLAMA_URL, + }, + }, +}) + +# OpenAI SDK pointed at Ollama for content rewriting +ollama_chat = OpenAI(base_url=f"{OLLAMA_URL}/v1", api_key="ollama") + +USER_ID = "content_writer" +RUN_ID = "smart_editing_session" +``` + + ## Storing Your Writing Preferences in Mem0 + + ```python def store_writing_preferences(): """Store your writing preferences in Mem0.""" - + preferences = """My writing preferences: 1. Use headings and sub-headings for structure. 2. Keep paragraphs concise (8–10 sentences max). @@ -61,9 +131,41 @@ def store_writing_preferences(): return response ``` + + +```python +def store_writing_preferences(): + """Store your writing preferences in Mem0.""" + + preferences = """My writing preferences: +1. Use headings and sub-headings for structure. +2. Keep paragraphs concise (8–10 sentences max). +3. Incorporate specific numbers and statistics. +4. Provide concrete examples. +5. Use bullet points for clarity. +6. Avoid jargon and buzzwords.""" + + messages = [ + {"role": "user", "content": "Here are my writing style preferences."}, + {"role": "assistant", "content": preferences}, + ] + + response = memory.add( + messages, + user_id=USER_ID, + run_id=RUN_ID, + metadata={"type": "preferences", "category": "writing_style"}, + ) + + return response +``` + + ## Editing Content Using Stored Preferences + + ```python def apply_writing_style(original_content): """Use preferences stored in Mem0 to guide content rewriting.""" @@ -107,29 +209,73 @@ Preferences: return clean_response ``` + + +```python +def apply_writing_style(original_content): + """Use preferences stored in Mem0 to guide content rewriting.""" + + results = memory.search( + query="What are my writing style preferences?", + user_id=USER_ID, + run_id=RUN_ID, + ) + + if not results: + print("No preferences found.") + return None + + preferences = "\n".join(r["memory"] for r in results.get("results", [])) + + system_prompt = f""" +You are a writing assistant. + +Apply the following writing style preferences to improve the user's content: + +Preferences: +{preferences} +""" + + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": f"""Original Content: + {original_content}"""}, + ] + + # Ollama via OpenAI-compatible API + response = ollama_chat.chat.completions.create( + model=CHAT_MODEL, + messages=messages, + ) + clean_response = response.choices[0].message.content.strip() + + return clean_response +``` + + ## Complete Workflow: Content Editing ```python def content_writing_workflow(content): """Automated workflow for editing a document based on writing preferences.""" - + # Store writing preferences (if not already stored) store_writing_preferences() # Ideally done once, or with a conditional check - + # Edit the document with Mem0 preferences edited_content = apply_writing_style(content) - + if not edited_content: return "Failed to edit document." - + # Display results print("\n=== ORIGINAL DOCUMENT ===\n") print(content) - + print("\n=== EDITED DOCUMENT ===\n") print(edited_content) - + return edited_content ``` @@ -138,8 +284,8 @@ def content_writing_workflow(content): ```python # Define your document original_content = """Project Proposal - -The following proposal outlines our strategy for the Q3 marketing campaign. + +The following proposal outlines our strategy for the Q3 marketing campaign. We believe this approach will significantly increase our market share. Increase brand awareness @@ -160,8 +306,8 @@ Your document will be transformed into a structured, well-formatted version base ### Original Document ``` Project Proposal - -The following proposal outlines our strategy for the Q3 marketing campaign. + +The following proposal outlines our strategy for the Q3 marketing campaign. We believe this approach will significantly increase our market share. Increase brand awareness @@ -204,7 +350,7 @@ This proposal outlines our strategy for the Q3 marketing campaign. We aim to sig ### Conclusion -We believe this strategy will effectively increase our market share. To achieve these goals, we need your support and collaboration. Let’s work together to make this campaign a success. Please review the proposal and provide your feedback by the end of the week. +We believe this strategy will effectively increase our market share. To achieve these goals, we need your support and collaboration. Let's work together to make this campaign a success. Please review the proposal and provide your feedback by the end of the week. ``` Mem0 enables a seamless, intelligent content-writing workflow, perfect for content creators, marketers, and technical writers looking to scale their personal tone and structure across work.