From c5b47bd32fc6cd06a749ba1f3419962d4cb62f67 Mon Sep 17 00:00:00 2001 From: ajaysi Date: Mon, 21 Apr 2025 16:34:18 +0530 Subject: [PATCH] Detailed Docs & Onboarding improvements --- docs/Makefile | 20 + docs/api/ai_writers.rst | 127 ++++ docs/api/analytics.rst | 12 + docs/api/core.rst | 51 ++ docs/api/database.rst | 22 + docs/api/index.rst | 83 +++ docs/api/utils.rst | 78 +++ docs/api/web_crawlers.rst | 28 + docs/architecture/api_design.rst | 449 ++++++++++++++ docs/architecture/architecture_overview.rst | 170 ++++++ docs/architecture/component_diagram.rst | 171 ++++++ docs/architecture/database_schema.rst | 306 ++++++++++ docs/architecture/deployment.rst | 571 ++++++++++++++++++ .../diagrams/content_generation_workflow.png | Bin 0 -> 145226 bytes .../diagrams/database_architecture.png | Bin 0 -> 93620 bytes .../diagrams/high_level_architecture.png | Bin 0 -> 162068 bytes docs/architecture/index.rst | 156 +++++ docs/architecture/security.rst | 335 ++++++++++ docs/changelog.rst | 39 ++ docs/conf.py | 40 ++ docs/contributing.rst | 5 + docs/developer/coding_standards.rst | 230 +++++++ docs/developer/index.rst | 39 ++ docs/developer/setup.rst | 176 ++++++ docs/index.rst | 34 ++ docs/installation.rst | 117 ++++ docs/introduction.rst | 56 ++ docs/make.bat | 35 ++ docs/roadmap.rst | 374 ++++++++++++ .../tutorials/advanced_content_generation.rst | 529 ++++++++++++++++ docs/tutorials/getting_started.rst | 283 +++++++++ docs/tutorials/index.rst | 99 +++ docs/usage.rst | 160 +++++ lib/alwrity_ui/keyword_web_researcher.py | 8 +- .../components/alwrity_integrations.py | 10 + lib/utils/api_key_manager/components/base.py | 9 +- .../api_key_manager/components/final_setup.py | 202 +++++-- .../components/personalization_setup.py | 28 +- .../components/website_setup.py | 19 + lib/utils/api_key_manager/manager.py | 51 +- lib/utils/api_key_manager/validation.py | 66 +- lib/workspace/alwrity_config/main_config.json | 5 +- 42 files changed, 5114 insertions(+), 79 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/api/ai_writers.rst create mode 100644 docs/api/analytics.rst create mode 100644 docs/api/core.rst create mode 100644 docs/api/database.rst create mode 100644 docs/api/index.rst create mode 100644 docs/api/utils.rst create mode 100644 docs/api/web_crawlers.rst create mode 100644 docs/architecture/api_design.rst create mode 100644 docs/architecture/architecture_overview.rst create mode 100644 docs/architecture/component_diagram.rst create mode 100644 docs/architecture/database_schema.rst create mode 100644 docs/architecture/deployment.rst create mode 100644 docs/architecture/diagrams/content_generation_workflow.png create mode 100644 docs/architecture/diagrams/database_architecture.png create mode 100644 docs/architecture/diagrams/high_level_architecture.png create mode 100644 docs/architecture/index.rst create mode 100644 docs/architecture/security.rst create mode 100644 docs/changelog.rst create mode 100644 docs/conf.py create mode 100644 docs/contributing.rst create mode 100644 docs/developer/coding_standards.rst create mode 100644 docs/developer/index.rst create mode 100644 docs/developer/setup.rst create mode 100644 docs/index.rst create mode 100644 docs/installation.rst create mode 100644 docs/introduction.rst create mode 100644 docs/make.bat create mode 100644 docs/roadmap.rst create mode 100644 docs/tutorials/advanced_content_generation.rst create mode 100644 docs/tutorials/getting_started.rst create mode 100644 docs/tutorials/index.rst create mode 100644 docs/usage.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/api/ai_writers.rst b/docs/api/ai_writers.rst new file mode 100644 index 00000000..dcc5e25f --- /dev/null +++ b/docs/api/ai_writers.rst @@ -0,0 +1,127 @@ +AI Writers +========= + +This section documents the AI writer modules that provide specialized content generation for different platforms. + +LinkedIn Writer +------------- + +.. automodule:: lib.ai_writers.linkedin_writer + :members: + :undoc-members: + :show-inheritance: + +LinkedIn Post Generator +~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.linkedin_writer.modules.post_generator + :members: + :undoc-members: + :show-inheritance: + +LinkedIn Article Generator +~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.linkedin_writer.modules.article_generator + :members: + :undoc-members: + :show-inheritance: + +LinkedIn Profile Optimizer +~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.linkedin_writer.modules.profile_optimizer + :members: + :undoc-members: + :show-inheritance: + +Twitter Writer +------------ + +.. automodule:: lib.ai_writers.twitter_writers + :members: + :undoc-members: + :show-inheritance: + +Tweet Generator +~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.twitter_writers.tweet_generator + :members: + :undoc-members: + :show-inheritance: + +Facebook Writer +------------- + +.. automodule:: lib.ai_writers.ai_facebook_writer + :members: + :undoc-members: + :show-inheritance: + +Facebook Ad Copy Generator +~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.ai_facebook_writer.modules.ad_copy_generator + :members: + :undoc-members: + :show-inheritance: + +Facebook Carousel Generator +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.ai_facebook_writer.modules.facebook_carousel + :members: + :undoc-members: + :show-inheritance: + +YouTube Writers +------------- + +.. automodule:: lib.ai_writers.youtube_writers + :members: + :undoc-members: + :show-inheritance: + +Story Writer +---------- + +.. automodule:: lib.ai_writers.ai_story_writer + :members: + :undoc-members: + :show-inheritance: + +Copywriter +--------- + +.. automodule:: lib.ai_writers.ai_copywriter + :members: + :undoc-members: + :show-inheritance: + +Blog Writers +---------- + +GitHub Blogs +~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.github_blogs + :members: + :undoc-members: + :show-inheritance: + +Scholar Blogs +~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.scholar_blogs + :members: + :undoc-members: + :show-inheritance: + +Speech to Blog +~~~~~~~~~~~~ + +.. automodule:: lib.ai_writers.speech_to_blog + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/analytics.rst b/docs/api/analytics.rst new file mode 100644 index 00000000..3de96983 --- /dev/null +++ b/docs/api/analytics.rst @@ -0,0 +1,12 @@ +Analytics +========= + +This section documents the analytics modules that provide content performance tracking and visualization. + +Analytics Engine +-------------- + +.. automodule:: lib.analytics + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/core.rst b/docs/api/core.rst new file mode 100644 index 00000000..fb490b6d --- /dev/null +++ b/docs/api/core.rst @@ -0,0 +1,51 @@ +Core API +======== + +This section documents the core modules of the AI-Writer platform. + +Main Application +-------------- + +.. automodule:: alwrity + :members: + :undoc-members: + :show-inheritance: + +GPT Providers +----------- + +Text Generation +~~~~~~~~~~~~~ + +.. automodule:: lib.gpt_providers.text_generation.gemini_pro_text + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.gpt_providers.text_generation.mistral_chat_completion + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.gpt_providers.text_generation.deepseek_text_gen + :members: + :undoc-members: + :show-inheritance: + +Image Generation +~~~~~~~~~~~~~~ + +.. automodule:: lib.gpt_providers.text_to_image_generation.main_generate_image_from_prompt + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.gpt_providers.text_to_image_generation.gen_gemini_images + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.gpt_providers.text_to_image_generation.gen_dali3_images + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/database.rst b/docs/api/database.rst new file mode 100644 index 00000000..d89eb8c7 --- /dev/null +++ b/docs/api/database.rst @@ -0,0 +1,22 @@ +Database +======== + +This section documents the database modules that handle content storage, retrieval, and vector search capabilities. + +Database Models +------------- + +.. automodule:: lib.database + :members: + :undoc-members: + :show-inheritance: + +Vector Database +------------- + +The vector database provides semantic search capabilities for content retrieval. + +.. automodule:: lib.workspace.alwrity_data.vectordb + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/index.rst b/docs/api/index.rst new file mode 100644 index 00000000..56d387e2 --- /dev/null +++ b/docs/api/index.rst @@ -0,0 +1,83 @@ +.. _api-reference: + +API Reference +============ + +This section provides detailed documentation for the AI-Writer API, including module references, class hierarchies, and function specifications. + +.. toctree:: + :maxdepth: 2 + :caption: API Documentation: + + core + ai_writers + database + utils + analytics + web_crawlers + +Core Modules +----------- + +.. automodule:: alwrity + :members: + :undoc-members: + :show-inheritance: + +AI Writers +--------- + +The AI Writers modules provide specialized content generation for different platforms and content types. + +.. toctree:: + :maxdepth: 1 + + ai_writers/linkedin + ai_writers/twitter + ai_writers/blog + ai_writers/email + +Database +------- + +The database modules handle content storage, retrieval, and vector search capabilities. + +.. toctree:: + :maxdepth: 1 + + database/models + database/vector_store + database/relational_store + +Utilities +-------- + +Utility modules provide supporting functionality across the application. + +.. toctree:: + :maxdepth: 1 + + utils/api_key_manager + utils/ui_setup + utils/seo_tools + +Analytics +-------- + +Analytics modules provide content performance tracking and visualization. + +.. toctree:: + :maxdepth: 1 + + analytics/content_analyzer + analytics/analytics_ui + +Web Crawlers +----------- + +Web crawler modules provide research capabilities by extracting information from the web. + +.. toctree:: + :maxdepth: 1 + + web_crawlers/async_web_crawler \ No newline at end of file diff --git a/docs/api/utils.rst b/docs/api/utils.rst new file mode 100644 index 00000000..fafc02da --- /dev/null +++ b/docs/api/utils.rst @@ -0,0 +1,78 @@ +Utilities +========= + +This section documents the utility modules that provide supporting functionality across the application. + +API Key Manager +------------- + +.. automodule:: lib.utils.api_key_manager + :members: + :undoc-members: + :show-inheritance: + +Website Analyzer +-------------- + +.. automodule:: lib.utils.website_analyzer + :members: + :undoc-members: + :show-inheritance: + +UI Components +----------- + +.. automodule:: lib.alwrity_ui + :members: + :undoc-members: + :show-inheritance: + +SEO Tools +-------- + +.. automodule:: lib.ai_seo_tools + :members: + :undoc-members: + :show-inheritance: + +Marketing Tools +------------- + +.. automodule:: lib.ai_marketing_tools + :members: + :undoc-members: + :show-inheritance: + +Blog Processing +------------- + +.. automodule:: lib.blog_metadata + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.blog_postprocessing + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: lib.blog_sections + :members: + :undoc-members: + :show-inheritance: + +Content Planning +-------------- + +.. automodule:: lib.content_planning_calender + :members: + :undoc-members: + :show-inheritance: + +Personalization +------------- + +.. automodule:: lib.personalization + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/web_crawlers.rst b/docs/api/web_crawlers.rst new file mode 100644 index 00000000..4a10ca33 --- /dev/null +++ b/docs/api/web_crawlers.rst @@ -0,0 +1,28 @@ +Web Crawlers +============ + +This section documents the web crawler modules that provide research capabilities by extracting information from the web. + +Web Researcher +------------ + +.. automodule:: lib.ai_web_researcher + :members: + :undoc-members: + :show-inheritance: + +Web Crawlers +---------- + +.. automodule:: lib.web_crawlers + :members: + :undoc-members: + :show-inheritance: + +Research Storage +-------------- + +.. automodule:: lib.workspace.alwrity_web_research + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/architecture/api_design.rst b/docs/architecture/api_design.rst new file mode 100644 index 00000000..9f148e85 --- /dev/null +++ b/docs/architecture/api_design.rst @@ -0,0 +1,449 @@ +API Design +========= + +This document outlines the API design principles and specifications for the AI-Writer platform. + +API Design Principles +------------------- + +The AI-Writer API follows these core design principles: + +1. **RESTful Architecture** + + * Resource-oriented design + * Standard HTTP methods (GET, POST, PUT, DELETE) + * Consistent URL structure + * Stateless interactions + +2. **Consistent Response Format** + + * JSON as the primary data format + * Standard error response structure + * Pagination for list endpoints + * Hypermedia links where appropriate + +3. **Versioning** + + * API versioning in URL path (e.g., `/api/v1/`) + * Backward compatibility within major versions + * Deprecation notices before removing features + +4. **Security** + + * Authentication via API keys or OAuth 2.0 + * Rate limiting to prevent abuse + * Input validation to prevent injection attacks + * HTTPS for all communications + +5. **Documentation** + + * OpenAPI/Swagger specification + * Interactive documentation + * Code examples for common operations + * Changelog for API updates + +API Endpoints +----------- + +Content Management +~~~~~~~~~~~~~~~~ + +.. code-block:: text + + # Create content + POST /api/v1/content + + # Get content by ID + GET /api/v1/content/{content_id} + + # Update content + PUT /api/v1/content/{content_id} + + # Delete content + DELETE /api/v1/content/{content_id} + + # List content with filtering + GET /api/v1/content?type={type}&limit={limit}&offset={offset} + + # Get content versions + GET /api/v1/content/{content_id}/versions + + # Revert to specific version + POST /api/v1/content/{content_id}/revert/{version_id} + +AI Generation +~~~~~~~~~~~ + +.. code-block:: text + + # Generate content from keywords + POST /api/v1/generate/content + + # Generate blog post + POST /api/v1/generate/blog + + # Generate social media post + POST /api/v1/generate/social + + # Generate email + POST /api/v1/generate/email + + # Generate outline + POST /api/v1/generate/outline + + # Generate image for content + POST /api/v1/generate/image + +Web Research +~~~~~~~~~~ + +.. code-block:: text + + # Perform web research + POST /api/v1/research + + # Get research results + GET /api/v1/research/{research_id} + + # Search previous research + GET /api/v1/research/search?query={query} + +SEO Tools +~~~~~~~~ + +.. code-block:: text + + # Analyze content for SEO + POST /api/v1/seo/analyze + + # Generate meta description + POST /api/v1/seo/meta-description + + # Generate SEO-friendly title + POST /api/v1/seo/title + + # Generate structured data + POST /api/v1/seo/structured-data + + # Generate alt text for images + POST /api/v1/seo/alt-text + +User Management +~~~~~~~~~~~~~ + +.. code-block:: text + + # Create user + POST /api/v1/users + + # Get user profile + GET /api/v1/users/{user_id} + + # Update user profile + PUT /api/v1/users/{user_id} + + # Delete user + DELETE /api/v1/users/{user_id} + + # Get user settings + GET /api/v1/users/{user_id}/settings + + # Update user settings + PUT /api/v1/users/{user_id}/settings + +API Key Management +~~~~~~~~~~~~~~~ + +.. code-block:: text + + # Create API key + POST /api/v1/api-keys + + # List API keys + GET /api/v1/api-keys + + # Revoke API key + DELETE /api/v1/api-keys/{key_id} + +Analytics +~~~~~~~~ + +.. code-block:: text + + # Get content analytics + GET /api/v1/analytics/content/{content_id} + + # Get user analytics + GET /api/v1/analytics/user/{user_id} + + # Get system analytics + GET /api/v1/analytics/system + +Request and Response Examples +--------------------------- + +Create Content +~~~~~~~~~~~~ + +Request: + +.. code-block:: json + + POST /api/v1/content + Content-Type: application/json + Authorization: Bearer {api_key} + + { + "title": "How to Improve SEO with AI", + "content_type": "blog", + "content": "# How to Improve SEO with AI\n\nIn this article, we'll explore...", + "metadata": { + "keywords": ["SEO", "AI", "content marketing"], + "category": "digital marketing", + "language": "en" + } + } + +Response: + +.. code-block:: json + + HTTP/1.1 201 Created + Content-Type: application/json + + { + "id": "c123e4567-e89b-12d3-a456-426614174000", + "title": "How to Improve SEO with AI", + "content_type": "blog", + "content": "# How to Improve SEO with AI\n\nIn this article, we'll explore...", + "metadata": { + "keywords": ["SEO", "AI", "content marketing"], + "category": "digital marketing", + "language": "en" + }, + "created_at": "2023-01-01T12:00:00Z", + "updated_at": "2023-01-01T12:00:00Z", + "user_id": "u123e4567-e89b-12d3-a456-426614174000", + "links": { + "self": "/api/v1/content/c123e4567-e89b-12d3-a456-426614174000", + "versions": "/api/v1/content/c123e4567-e89b-12d3-a456-426614174000/versions", + "analytics": "/api/v1/analytics/content/c123e4567-e89b-12d3-a456-426614174000" + } + } + +Generate Blog Post +~~~~~~~~~~~~~~~ + +Request: + +.. code-block:: json + + POST /api/v1/generate/blog + Content-Type: application/json + Authorization: Bearer {api_key} + + { + "keywords": ["artificial intelligence", "content creation"], + "title": "The Future of Content Creation with AI", + "tone": "informative", + "length": "medium", + "include_research": true, + "target_audience": "marketers" + } + +Response: + +.. code-block:: json + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "id": "g123e4567-e89b-12d3-a456-426614174000", + "title": "The Future of Content Creation with AI", + "content": "# The Future of Content Creation with AI\n\nArtificial intelligence is revolutionizing...", + "metadata": { + "keywords": ["artificial intelligence", "content creation"], + "tone": "informative", + "length": "medium", + "word_count": 1250, + "research_sources": [ + { + "title": "AI in Content Marketing Report 2023", + "url": "https://example.com/report", + "accessed_at": "2023-01-01T10:30:00Z" + } + ] + }, + "created_at": "2023-01-01T12:05:00Z", + "links": { + "save": "/api/v1/content", + "regenerate": "/api/v1/generate/blog", + "edit": "/api/v1/generate/edit" + } + } + +Error Response +~~~~~~~~~~~~ + +.. code-block:: json + + HTTP/1.1 400 Bad Request + Content-Type: application/json + + { + "error": { + "code": "invalid_request", + "message": "The request was invalid", + "details": [ + { + "field": "keywords", + "issue": "required", + "description": "The keywords field is required" + } + ] + }, + "request_id": "req_123456", + "documentation_url": "https://docs.alwrity.com/api/errors#invalid_request" + } + +API Authentication +---------------- + +The AI-Writer API supports the following authentication methods: + +1. **API Key Authentication** + + * Include the API key in the Authorization header: + `Authorization: Bearer {api_key}` + * API keys can be generated and managed through the API or web interface + * Different permission levels can be assigned to API keys + +2. **OAuth 2.0 (for multi-user deployments)** + + * Standard OAuth 2.0 flow with authorization code + * Supports scopes for fine-grained permissions + * Refresh token rotation for enhanced security + +Rate Limiting +----------- + +To ensure fair usage and system stability, the API implements rate limiting: + +* Rate limits are based on the user's plan +* Limits are applied per API key +* Rate limit information is included in response headers: + * `X-RateLimit-Limit`: Total requests allowed in the current period + * `X-RateLimit-Remaining`: Requests remaining in the current period + * `X-RateLimit-Reset`: Time when the rate limit resets (Unix timestamp) + +When a rate limit is exceeded, the API returns a 429 Too Many Requests response. + +Pagination +--------- + +List endpoints support pagination with the following parameters: + +* `limit`: Number of items per page (default: 20, max: 100) +* `offset`: Number of items to skip (for offset-based pagination) +* `cursor`: Cursor for the next page (for cursor-based pagination) + +Response includes pagination metadata: + +.. code-block:: json + + { + "data": [...], + "pagination": { + "total": 45, + "limit": 20, + "offset": 0, + "next_cursor": "cursor_for_next_page", + "has_more": true + } + } + +Filtering and Sorting +------------------- + +List endpoints support filtering and sorting: + +* Filtering: `?field=value&another_field=another_value` +* Range filtering: `?created_at_gte=2023-01-01&created_at_lte=2023-01-31` +* Sorting: `?sort=field` (ascending) or `?sort=-field` (descending) +* Multiple sort fields: `?sort=-created_at,title` + +Versioning Strategy +----------------- + +The API uses a versioning strategy to ensure backward compatibility: + +1. **Major Versions** + + * Included in the URL path: `/api/v1/`, `/api/v2/`, etc. + * Major versions may introduce breaking changes + * Previous major versions are supported for at least 12 months after a new version is released + +2. **Minor Updates** + + * Backward-compatible changes within a major version + * New endpoints or parameters may be added + * Existing functionality remains unchanged + +3. **Deprecation Process** + + * Features to be removed are marked as deprecated + * Deprecation notices are included in response headers + * Deprecated features are supported for at least 6 months before removal + +API Changelog +----------- + +The API changelog is maintained to track changes: + +* **v1.0.0 (2023-01-01)** + + * Initial release with core content management features + * Basic AI generation capabilities + * User management and authentication + +* **v1.1.0 (2023-03-15)** + + * Added SEO analysis endpoints + * Enhanced content generation with research integration + * Improved error handling and validation + +* **v1.2.0 (2023-06-30)** + + * Added analytics endpoints + * Introduced cursor-based pagination + * Added support for content versioning + +Future API Roadmap +---------------- + +Planned API enhancements: + +1. **Content Collaboration** + + * Endpoints for collaborative editing + * Comment and feedback functionality + * Role-based access control + +2. **Advanced Analytics** + + * Predictive performance metrics + * Competitive analysis + * Content optimization recommendations + +3. **Workflow Automation** + + * Scheduled content generation + * Approval workflows + * Integration with publishing platforms + +4. **Multi-modal Content** + + * Enhanced image generation + * Audio content generation + * Video script generation \ No newline at end of file diff --git a/docs/architecture/architecture_overview.rst b/docs/architecture/architecture_overview.rst new file mode 100644 index 00000000..4811371a --- /dev/null +++ b/docs/architecture/architecture_overview.rst @@ -0,0 +1,170 @@ +Architecture Overview +==================== + +This document provides a comprehensive overview of the AI-Writer architecture, explaining the system's components, their interactions, and the design principles behind the implementation. + +High-Level Architecture +---------------------- + +.. image:: diagrams/high_level_architecture.png + :alt: High-level architecture diagram of AI-Writer + :width: 100% + +The AI-Writer platform consists of several key components: + +1. **User Interface Layer** + + * Streamlit-based web interface + * Command-line interface for automation + * API endpoints for programmatic access + +2. **Core Services Layer** + + * AI Writers: Various specialized content generation modules + * Web Research: Tools for gathering factual information from the internet + * SEO Tools: Utilities for optimizing content for search engines + * Analytics: Content performance tracking and analysis + +3. **Data Storage Layer** + + * Vector Database (ChromaDB): Stores embeddings for semantic search + * Relational Database (SQLite): Stores structured data like user preferences and content metadata + +4. **External Integrations Layer** + + * LLM Providers: OpenAI, Google Gemini, Anthropic, etc. + * Search Providers: Tavily, SerperDev, Exa, etc. + * Image Generation: Stability AI + * Publishing Platforms: WordPress, Jekyll, etc. + +Database Architecture +-------------------- + +.. image:: diagrams/database_architecture.png + :alt: Database architecture diagram of AI-Writer + :width: 100% + +The database architecture consists of two main components: + +1. **Vector Storage** + + * Uses ChromaDB for storing and retrieving text embeddings + * Enables semantic search capabilities + * Stores content in collections for efficient retrieval + +2. **Relational Storage** + + * Uses SQLite for structured data storage + * Key models include: + - User: Stores user preferences and settings + - ContentItem: Represents content created by users + - ContentVersion: Tracks version history of content + - Analytics: Stores performance metrics for content + +Content Generation Workflow +-------------------------- + +.. image:: diagrams/content_generation_workflow.png + :alt: Content generation workflow diagram of AI-Writer + :width: 100% + +The content generation process follows these steps: + +1. **Input Phase** + + * User provides keywords, topics, or other input parameters + * System configures the generation process based on user preferences + +2. **Research Phase** + + * Web research is conducted using various search providers + * Relevant information is gathered and processed + * Facts are extracted and organized for use in content generation + +3. **Content Creation Phase** + + * Content outline is generated based on research + * Initial draft is created using AI models + * Final content is refined and polished + +4. **Enhancement Phase** + + * SEO optimization is applied to improve search visibility + * Images are generated or selected to complement the content + * Metadata is generated for better categorization and discovery + +5. **Storage Phase** + + * Content is stored in both vector and relational databases + * Embeddings are created for semantic search capabilities + * Metadata is indexed for efficient retrieval + +6. **Publishing Phase** + + * Content is formatted for the target platform + * Publishing options include WordPress, Markdown, and others + * Content is delivered to the user or published directly + +Design Principles +---------------- + +The AI-Writer architecture is built on the following design principles: + +1. **Modularity** + + * Components are designed to be independent and interchangeable + * New AI models and services can be added with minimal changes + * Functionality is organized into logical modules + +2. **Extensibility** + + * The system is designed to be easily extended with new features + * Plugin architecture allows for custom integrations + * Configuration options enable customization without code changes + +3. **Reliability** + + * Error handling is implemented throughout the system + * Fallback mechanisms ensure continued operation + * Logging provides visibility into system behavior + +4. **Performance** + + * Caching is used to improve response times + * Asynchronous processing for long-running tasks + * Efficient data storage and retrieval mechanisms + +5. **Security** + + * API keys are securely stored and managed + * User data is protected with appropriate measures + * Input validation prevents common security issues + +Future Architecture Enhancements +------------------------------- + +Planned improvements to the architecture include: + +1. **Distributed Processing** + + * Support for distributed content generation + * Load balancing for improved scalability + * Parallel processing of research and generation tasks + +2. **Advanced Caching** + + * Intelligent caching of common queries and results + * Cache invalidation strategies for fresh content + * Distributed cache for multi-user environments + +3. **Enhanced Security** + + * Role-based access control + * End-to-end encryption for sensitive data + * Advanced authentication mechanisms + +4. **Containerization** + + * Docker containers for easier deployment + * Kubernetes support for orchestration + * Microservices architecture for better scalability \ No newline at end of file diff --git a/docs/architecture/component_diagram.rst b/docs/architecture/component_diagram.rst new file mode 100644 index 00000000..71e8a377 --- /dev/null +++ b/docs/architecture/component_diagram.rst @@ -0,0 +1,171 @@ +Component Diagram +================ + +This document provides detailed information about the components of the AI-Writer system and their interactions. + +Core Components +-------------- + +AI Writers +~~~~~~~~~~ + +The AI Writers component is responsible for generating various types of content using AI models. It includes several specialized writers: + +- **Blog Writer**: Generates blog posts based on keywords and web research +- **News Article Writer**: Creates news articles with citations from current events +- **Social Media Writer**: Produces content for various social platforms +- **Email Writer**: Generates professional and business emails +- **Story Writer**: Creates narrative content based on user input +- **YouTube Script Writer**: Develops scripts for video content + +Each writer implements a common interface but has specialized logic for its specific content type. The writers interact with LLM providers through a unified API layer that handles authentication, rate limiting, and error handling. + +Web Research +~~~~~~~~~~~ + +The Web Research component gathers information from the internet to provide factual context for content generation. It includes: + +- **SERP Integration**: Retrieves search engine results +- **Tavily Integration**: Uses AI-powered search for relevant information +- **Exa Integration**: Performs semantic search for related content +- **Web Crawler**: Extracts content from specified URLs +- **Content Analyzer**: Processes and summarizes gathered information + +This component ensures that generated content is factually accurate and up-to-date by providing relevant research data to the AI Writers. + +SEO Tools +~~~~~~~~~ + +The SEO Tools component provides utilities for optimizing content for search engines: + +- **Keyword Analyzer**: Identifies and analyzes target keywords +- **Meta Description Generator**: Creates SEO-friendly meta descriptions +- **Title Generator**: Produces optimized titles for content +- **Structured Data Generator**: Creates schema markup for rich snippets +- **Image Optimizer**: Optimizes images for web performance +- **On-Page SEO Analyzer**: Evaluates content for SEO best practices + +These tools work together to ensure that generated content has the best chance of ranking well in search engines. + +Analytics +~~~~~~~~ + +The Analytics component tracks and analyzes content performance: + +- **Content Metrics**: Measures readability, engagement potential, and other metrics +- **Performance Tracker**: Monitors content performance over time +- **Recommendation Engine**: Suggests improvements based on analytics +- **Report Generator**: Creates reports on content effectiveness + +This component helps users understand how their content is performing and how it can be improved. + +Data Storage +----------- + +Vector Database +~~~~~~~~~~~~~~ + +The Vector Database component uses ChromaDB to store and retrieve text embeddings: + +- **Embedding Generator**: Creates vector representations of text +- **Collection Manager**: Organizes embeddings into collections +- **Semantic Search**: Performs similarity searches on embeddings +- **Metadata Manager**: Associates metadata with embeddings + +This component enables semantic search capabilities, allowing users to find content based on meaning rather than just keywords. + +Relational Database +~~~~~~~~~~~~~~~~~~ + +The Relational Database component uses SQLite to store structured data: + +- **User Manager**: Handles user data and preferences +- **Content Repository**: Stores content items and metadata +- **Version Control**: Tracks content versions and changes +- **Analytics Storage**: Stores performance metrics and analytics data + +This component provides persistent storage for all structured data in the system. + +External Integrations +-------------------- + +LLM Providers +~~~~~~~~~~~~ + +The LLM Providers component integrates with various AI models: + +- **OpenAI Integration**: Connects to GPT models +- **Google Gemini Integration**: Interfaces with Gemini models +- **Anthropic Integration**: Works with Claude models +- **Ollama Integration**: Supports local LLM deployment + +This component provides a unified interface to different AI models, allowing the system to use the best model for each task. + +Search Providers +~~~~~~~~~~~~~~~ + +The Search Providers component connects to external search services: + +- **Tavily Client**: Interfaces with Tavily AI search +- **SerperDev Client**: Connects to SerperDev API +- **Exa Client**: Integrates with Exa search API +- **Google Search Client**: Provides access to Google search results + +These integrations enable the system to gather relevant information from the internet for content generation. + +Image Generation +~~~~~~~~~~~~~~~ + +The Image Generation component creates images to complement content: + +- **Stability AI Integration**: Connects to Stable Diffusion models +- **DALL-E Integration**: Interfaces with OpenAI's DALL-E +- **Image Processor**: Optimizes and formats generated images +- **Image Repository**: Stores and manages generated images + +This component enhances content with relevant visuals, improving engagement and comprehension. + +Publishing Platforms +~~~~~~~~~~~~~~~~~~~ + +The Publishing Platforms component enables content distribution: + +- **WordPress Integration**: Publishes content to WordPress sites +- **Markdown Exporter**: Creates Markdown files for static sites +- **HTML Exporter**: Generates HTML for web publishing +- **API Connectors**: Interfaces with various content platforms + +This component streamlines the process of publishing generated content to various platforms. + +Component Interactions +--------------------- + +Content Generation Flow +~~~~~~~~~~~~~~~~~~~~~~ + +1. User provides input parameters through the UI +2. Web Research gathers relevant information +3. AI Writers generate content using research data and LLM providers +4. SEO Tools optimize the content for search engines +5. Content is stored in both Vector and Relational databases +6. Analytics evaluates the content quality and potential performance +7. Content is prepared for publishing through the Publishing Platforms + +Data Flow +~~~~~~~~~ + +1. User preferences and settings flow from UI to Relational Database +2. Research data flows from Web Research to AI Writers +3. Generated content flows from AI Writers to SEO Tools +4. Optimized content flows to Data Storage components +5. Content metrics flow from Analytics to Relational Database +6. Published content flows from Publishing Platforms to external systems + +Error Handling +~~~~~~~~~~~~~ + +1. LLM provider errors are handled by fallback mechanisms +2. Web Research failures trigger alternative search methods +3. Database errors are logged and retried with exponential backoff +4. Publishing failures are queued for retry +5. All errors are logged for monitoring and debugging \ No newline at end of file diff --git a/docs/architecture/database_schema.rst b/docs/architecture/database_schema.rst new file mode 100644 index 00000000..bbe346fb --- /dev/null +++ b/docs/architecture/database_schema.rst @@ -0,0 +1,306 @@ +Database Schema +============== + +This document describes the database schema used in the AI-Writer platform, including both the relational database and vector database components. + +Relational Database Schema +------------------------ + +AI-Writer uses SQLAlchemy ORM to interact with the relational database. The schema consists of the following main tables: + +User +~~~~ + +Stores user information and preferences. + +.. code-block:: python + + class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True) + username = Column(String, unique=True, nullable=False) + email = Column(String, unique=True, nullable=False) + password_hash = Column(String, nullable=False) + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + api_keys = relationship("ApiKey", back_populates="user") + contents = relationship("Content", back_populates="user") + settings = relationship("UserSetting", back_populates="user", uselist=False) + +ApiKey +~~~~~~ + +Stores encrypted API keys for various services. + +.. code-block:: python + + class ApiKey(Base): + __tablename__ = "api_keys" + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey("users.id")) + service_name = Column(String, nullable=False) + encrypted_key = Column(String, nullable=False) + is_active = Column(Boolean, default=True) + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = relationship("User", back_populates="api_keys") + +Content +~~~~~~~ + +Stores generated content with metadata. + +.. code-block:: python + + class Content(Base): + __tablename__ = "contents" + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey("users.id")) + title = Column(String, nullable=False) + content_type = Column(String, nullable=False) # blog, linkedin, twitter, etc. + content_text = Column(Text, nullable=False) + metadata = Column(JSON) + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = relationship("User", back_populates="contents") + versions = relationship("ContentVersion", back_populates="content") + analytics = relationship("ContentAnalytics", back_populates="content") + +ContentVersion +~~~~~~~~~~~~~ + +Tracks versions of content for history and rollback. + +.. code-block:: python + + class ContentVersion(Base): + __tablename__ = "content_versions" + + id = Column(Integer, primary_key=True) + content_id = Column(Integer, ForeignKey("contents.id")) + version_number = Column(Integer, nullable=False) + content_text = Column(Text, nullable=False) + metadata = Column(JSON) + created_at = Column(DateTime, default=datetime.utcnow) + + # Relationships + content = relationship("Content", back_populates="versions") + +ContentAnalytics +~~~~~~~~~~~~~~ + +Stores analytics data for content performance. + +.. code-block:: python + + class ContentAnalytics(Base): + __tablename__ = "content_analytics" + + id = Column(Integer, primary_key=True) + content_id = Column(Integer, ForeignKey("contents.id")) + views = Column(Integer, default=0) + likes = Column(Integer, default=0) + shares = Column(Integer, default=0) + comments = Column(Integer, default=0) + engagement_rate = Column(Float, default=0.0) + last_updated = Column(DateTime, default=datetime.utcnow) + + # Relationships + content = relationship("Content", back_populates="analytics") + +UserSetting +~~~~~~~~~~ + +Stores user preferences and settings. + +.. code-block:: python + + class UserSetting(Base): + __tablename__ = "user_settings" + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey("users.id"), unique=True) + preferred_ai_provider = Column(String) + default_content_type = Column(String) + ui_theme = Column(String, default="light") + language = Column(String, default="en") + settings_json = Column(JSON) + + # Relationships + user = relationship("User", back_populates="settings") + +Template +~~~~~~~ + +Stores reusable content templates. + +.. code-block:: python + + class Template(Base): + __tablename__ = "templates" + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey("users.id")) + name = Column(String, nullable=False) + content_type = Column(String, nullable=False) + template_text = Column(Text, nullable=False) + variables = Column(JSON) + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = relationship("User") + +Vector Database Schema +-------------------- + +AI-Writer uses ChromaDB for vector storage, which enables semantic search and retrieval of content. The vector database stores: + +1. **Content Embeddings** + + * Generated from content text using embedding models + * Used for semantic search and content similarity + +2. **Metadata** + + * Content ID (linking to relational database) + * Content type + * Creation date + * Keywords and tags + +3. **Collections** + + ChromaDB organizes embeddings into collections: + + * `content_embeddings`: Main collection for all content + * `user_{user_id}_content`: Per-user content collections + * `{content_type}_embeddings`: Collections by content type + +Vector Database Operations +------------------------ + +The vector database supports the following operations: + +1. **Adding Content** + + .. code-block:: python + + def add_content_to_vector_db(content_id, content_text, metadata): + """Add content to the vector database. + + Args: + content_id: The ID of the content in the relational database. + content_text: The text content to embed. + metadata: Additional metadata for the content. + """ + embeddings = get_embeddings(content_text) + collection = get_collection("content_embeddings") + collection.add( + ids=[str(content_id)], + embeddings=[embeddings], + metadatas=[metadata], + documents=[content_text] + ) + +2. **Searching Content** + + .. code-block:: python + + def search_similar_content(query_text, limit=5): + """Search for similar content using vector similarity. + + Args: + query_text: The query text to search for. + limit: Maximum number of results to return. + + Returns: + List of similar content items with their similarity scores. + """ + query_embedding = get_embeddings(query_text) + collection = get_collection("content_embeddings") + results = collection.query( + query_embeddings=[query_embedding], + n_results=limit + ) + return results + +3. **Updating Content** + + .. code-block:: python + + def update_content_in_vector_db(content_id, new_content_text, metadata): + """Update content in the vector database. + + Args: + content_id: The ID of the content to update. + new_content_text: The updated text content. + metadata: Updated metadata. + """ + new_embedding = get_embeddings(new_content_text) + collection = get_collection("content_embeddings") + collection.update( + ids=[str(content_id)], + embeddings=[new_embedding], + metadatas=[metadata], + documents=[new_content_text] + ) + +Database Migrations +----------------- + +AI-Writer uses Alembic for database migrations. The migration workflow is: + +1. **Create Migration** + + .. code-block:: bash + + alembic revision --autogenerate -m "Description of changes" + +2. **Apply Migration** + + .. code-block:: bash + + alembic upgrade head + +3. **Rollback Migration** + + .. code-block:: bash + + alembic downgrade -1 + +Database Backup and Restore +------------------------- + +Regular database backups are recommended: + +1. **SQLite Backup** + + .. code-block:: bash + + # Backup + sqlite3 data/alwrity.db .dump > backup.sql + + # Restore + sqlite3 data/alwrity.db < backup.sql + +2. **Vector Database Backup** + + ChromaDB data is stored in the specified directory and can be backed up by copying the directory: + + .. code-block:: bash + + # Backup + cp -r data/vectordb data/vectordb_backup + + # Restore + rm -rf data/vectordb + cp -r data/vectordb_backup data/vectordb \ No newline at end of file diff --git a/docs/architecture/deployment.rst b/docs/architecture/deployment.rst new file mode 100644 index 00000000..87d83158 --- /dev/null +++ b/docs/architecture/deployment.rst @@ -0,0 +1,571 @@ +Deployment Architecture +===================== + +This document outlines the deployment architecture for the AI-Writer platform, including deployment models, infrastructure requirements, and operational considerations. + +Deployment Models +--------------- + +AI-Writer supports multiple deployment models to accommodate different user needs and scale requirements: + +Single-User Deployment +~~~~~~~~~~~~~~~~~~~~ + +Ideal for individual content creators or small teams: + +1. **Local Installation** + + * Runs on a single machine + * SQLite database for data storage + * Local file system for content storage + * Minimal resource requirements + +2. **Configuration** + + * Simple configuration file + * Environment variables for API keys + * Local storage paths + * Logging configuration + +3. **Resource Requirements** + + * CPU: 2+ cores + * RAM: 4GB minimum (8GB recommended) + * Storage: 10GB minimum + * Python 3.9+ runtime + +Multi-User Deployment +~~~~~~~~~~~~~~~~~~~ + +Suitable for teams and organizations: + +1. **Server Deployment** + + * Dedicated server or cloud instance + * PostgreSQL database + * Shared file storage + * Web server (Nginx/Apache) with WSGI/ASGI + +2. **Docker Deployment** + + * Containerized application + * Docker Compose for orchestration + * Persistent volumes for data + * Separate containers for services + +3. **Resource Requirements** + + * CPU: 4+ cores + * RAM: 16GB minimum + * Storage: 50GB+ SSD + * Network: 100Mbps+ bandwidth + +Enterprise Deployment +~~~~~~~~~~~~~~~~~~~ + +For large organizations with high volume requirements: + +1. **Kubernetes Deployment** + + * Containerized microservices + * Horizontal scaling + * Load balancing + * High availability configuration + +2. **Database Scaling** + + * Database clustering + * Read replicas + * Connection pooling + * Automated backups + +3. **Resource Requirements** + + * CPU: 8+ cores per node + * RAM: 32GB+ per node + * Storage: 100GB+ SSD with high IOPS + * Network: 1Gbps+ bandwidth + +Infrastructure Components +----------------------- + +Core Components +~~~~~~~~~~~~~ + +1. **Application Servers** + + * Runs the AI-Writer application code + * Handles HTTP requests + * Processes content generation tasks + * Manages user sessions + +2. **Database Servers** + + * Stores relational data (SQLite/PostgreSQL) + * Stores vector embeddings (ChromaDB) + * Handles data persistence + * Manages transactions and concurrency + +3. **File Storage** + + * Stores generated content + * Stores uploaded files + * Manages file versioning + * Handles file access control + +4. **Web Servers** + + * Handles HTTP/HTTPS traffic + * SSL termination + * Static file serving + * Request routing + +Optional Components +~~~~~~~~~~~~~~~~ + +1. **Cache Servers** + + * Redis for caching + * Session storage + * Rate limiting + * Task queuing + +2. **Background Workers** + + * Processes asynchronous tasks + * Handles long-running operations + * Manages scheduled jobs + * Processes content generation queue + +3. **Load Balancers** + + * Distributes traffic across servers + * Health checking + * SSL termination + * DDoS protection + +4. **Monitoring Services** + + * Application performance monitoring + * Log aggregation + * Metrics collection + * Alerting + +Deployment Topologies +------------------- + +Basic Topology +~~~~~~~~~~~~ + +For single-user or small team deployments: + +``` +[User] → [Web Server] → [AI-Writer Application] → [SQLite/PostgreSQL] + → [File Storage] + → [External APIs] +``` + +Standard Topology +~~~~~~~~~~~~~~ + +For multi-user deployments: + +``` +[Users] → [Load Balancer] → [Web Servers] → [Application Servers] → [PostgreSQL Cluster] + → [Background Workers] → [File Storage] + → [Redis Cache] + → [External APIs] +``` + +High-Availability Topology +~~~~~~~~~~~~~~~~~~~~~~~ + +For enterprise deployments: + +``` +[Users] → [CDN] → [Load Balancer] → [Web Servers (Multiple AZs)] + → [Application Servers (Multiple AZs)] + → [Background Workers (Multiple AZs)] + → [PostgreSQL (Primary + Replicas)] + → [Redis Cluster] + → [Distributed File Storage] + → [External APIs with Fallbacks] +``` + +Deployment Process +---------------- + +Installation Methods +~~~~~~~~~~~~~~~~~ + +1. **Manual Installation** + + * Clone repository + * Install dependencies + * Configure environment + * Initialize database + * Start application + +2. **Docker Installation** + + * Pull Docker images + * Configure Docker Compose + * Start containers + * Initialize services + * Configure networking + +3. **Kubernetes Installation** + + * Apply Kubernetes manifests + * Configure Helm charts + * Set up persistent volumes + * Configure ingress + * Deploy services + +Configuration Management +~~~~~~~~~~~~~~~~~~~~~ + +1. **Environment Variables** + + * API keys and credentials + * Database connection strings + * Service endpoints + * Feature flags + +2. **Configuration Files** + + * Application settings + * Logging configuration + * Database settings + * Cache settings + +3. **Secrets Management** + + * Kubernetes secrets + * Docker secrets + * Vault integration + * Encrypted configuration + +Continuous Integration/Deployment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. **CI Pipeline** + + * Automated testing + * Code quality checks + * Security scanning + * Build artifacts + +2. **CD Pipeline** + + * Automated deployment + * Blue/green deployment + * Canary releases + * Rollback capability + +3. **Infrastructure as Code** + + * Terraform for infrastructure + * Ansible for configuration + * Helm charts for Kubernetes + * Docker Compose for local deployment + +Operational Considerations +------------------------ + +Monitoring and Logging +~~~~~~~~~~~~~~~~~~~ + +1. **Application Monitoring** + + * Performance metrics + * Error tracking + * User activity + * API usage + +2. **Infrastructure Monitoring** + + * Resource utilization + * Network traffic + * Database performance + * Storage capacity + +3. **Logging Strategy** + + * Centralized log collection + * Structured logging + * Log retention policy + * Log analysis tools + +Backup and Recovery +~~~~~~~~~~~~~~~~ + +1. **Database Backups** + + * Regular automated backups + * Point-in-time recovery + * Backup verification + * Off-site backup storage + +2. **File Storage Backups** + + * Incremental backups + * Version history + * Disaster recovery + * Backup encryption + +3. **Recovery Procedures** + + * Database restoration + * File recovery + * System rebuild + * Disaster recovery testing + +Scaling Strategies +~~~~~~~~~~~~~~~ + +1. **Vertical Scaling** + + * Increase resources for existing servers + * Upgrade database instances + * Enhance storage performance + * Optimize application code + +2. **Horizontal Scaling** + + * Add application servers + * Database read replicas + * Distributed caching + * Load balancing + +3. **Auto-scaling** + + * Scale based on CPU/memory usage + * Scale based on request volume + * Scheduled scaling for predictable loads + * Scale to zero for development environments + +Security Considerations +-------------------- + +Network Security +~~~~~~~~~~~~~ + +1. **Firewall Configuration** + + * Restrict access to necessary ports + * Implement network segmentation + * Configure security groups + * DDoS protection + +2. **TLS Configuration** + + * TLS 1.3 support + * Strong cipher suites + * Certificate management + * HSTS implementation + +3. **VPN Access** + + * Secure administrative access + * Multi-factor authentication + * Access logging + * Role-based access control + +Data Security +~~~~~~~~~~ + +1. **Data Encryption** + + * Encryption in transit + * Encryption at rest + * Key management + * Regular key rotation + +2. **Access Controls** + + * Principle of least privilege + * Role-based access + * Regular access reviews + * Privileged access management + +3. **Compliance** + + * Data residency requirements + * Regulatory compliance + * Privacy regulations + * Security certifications + +Deployment Checklist +------------------ + +Pre-Deployment +~~~~~~~~~~~~ + +1. **Environment Preparation** + + * Verify infrastructure requirements + * Configure networking + * Set up security controls + * Prepare databases + +2. **Application Preparation** + + * Verify application version + * Check dependencies + * Prepare configuration + * Test in staging environment + +3. **Documentation** + + * Update deployment documentation + * Prepare rollback procedures + * Document configuration changes + * Update user documentation + +Deployment +~~~~~~~~~ + +1. **Backup** + + * Backup existing data + * Backup configuration + * Verify backup integrity + * Prepare rollback point + +2. **Deployment Steps** + + * Follow deployment procedure + * Monitor deployment progress + * Verify service health + * Run smoke tests + +3. **Verification** + + * Verify functionality + * Check performance + * Validate security + * Test integrations + +Post-Deployment +~~~~~~~~~~~~~ + +1. **Monitoring** + + * Monitor application performance + * Watch for errors + * Track user activity + * Monitor resource usage + +2. **Communication** + + * Notify users of deployment + * Provide release notes + * Address initial feedback + * Support user questions + +3. **Optimization** + + * Identify performance bottlenecks + * Optimize resource usage + * Fine-tune configuration + * Plan for future improvements + +Deployment Environments +--------------------- + +Development Environment +~~~~~~~~~~~~~~~~~~~~ + +1. **Purpose** + + * Feature development + * Bug fixing + * Testing + * Integration + +2. **Characteristics** + + * Minimal resources + * Frequent updates + * Non-production data + * Developer access + +3. **Configuration** + + * Debug mode enabled + * Verbose logging + * Test API keys + * Local development tools + +Staging Environment +~~~~~~~~~~~~~~~~ + +1. **Purpose** + + * Pre-production testing + * Performance testing + * User acceptance testing + * Deployment validation + +2. **Characteristics** + + * Similar to production + * Controlled access + * Sanitized production data + * Regular refreshes + +3. **Configuration** + + * Production-like settings + * Monitoring enabled + * Test integrations + * Staging API endpoints + +Production Environment +~~~~~~~~~~~~~~~~~~~ + +1. **Purpose** + + * Live user access + * Business operations + * Customer data + * Revenue generation + +2. **Characteristics** + + * High availability + * Scalability + * Security + * Performance + +3. **Configuration** + + * Optimized settings + * Minimal logging + * Production API keys + * Strict access controls + +Future Deployment Enhancements +---------------------------- + +1. **Containerization Improvements** + + * Optimize container images + * Implement container security scanning + * Enhance orchestration + * Improve container networking + +2. **Infrastructure as Code** + + * Complete IaC implementation + * Automated environment provisioning + * Configuration management + * Compliance as code + +3. **Advanced Deployment Strategies** + + * Feature flags + * A/B testing infrastructure + * Canary deployments + * Progressive delivery \ No newline at end of file diff --git a/docs/architecture/diagrams/content_generation_workflow.png b/docs/architecture/diagrams/content_generation_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..27d93037a6289a1904a12998521d2fe74b109728 GIT binary patch literal 145226 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 JkOn#lefq(M}EllJy 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 YdFWvXdhURXn)r$GQw{mDC(mF1Ul@T@O8@`> literal 0 HcmV?d00001 diff --git a/docs/architecture/diagrams/high_level_architecture.png b/docs/architecture/diagrams/high_level_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0ab11e229691e2c799148c43f568670ae207e4 GIT binary patch literal 162068 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/architecture/index.rst b/docs/architecture/index.rst new file mode 100644 index 00000000..6092711c --- /dev/null +++ b/docs/architecture/index.rst @@ -0,0 +1,156 @@ +System Architecture +================== + +This section provides a comprehensive overview of the AI-Writer system architecture, including component interactions, data flow, and design patterns. + +.. toctree:: + :maxdepth: 2 + :caption: Architecture Documentation: + + overview + components + database_schema + api_design + security + +Architecture Overview +------------------- + +.. include:: overview.rst + +Component Diagram +--------------- + +.. image:: diagrams/high_level_architecture.png + :alt: AI-Writer High-Level Architecture Diagram + :width: 800px + +.. image:: diagrams/database_architecture.png + :alt: AI-Writer Database Architecture Diagram + :width: 800px + +.. image:: diagrams/content_generation_workflow.png + :alt: AI-Writer Content Generation Workflow Diagram + :width: 800px + +Key Components +------------ + +The AI-Writer platform consists of several key components: + +1. **User Interface Layer** + + * Streamlit-based web interface + * Component-based UI architecture + * Responsive design for multiple devices + +2. **Application Layer** + + * Content generation modules + * AI provider integrations + * Research and analysis tools + * Analytics and reporting + +3. **Data Layer** + + * Relational database (SQLite/PostgreSQL) + * Vector database (ChromaDB) + * File storage for generated content + +4. **Integration Layer** + + * API endpoints for external integration + * Authentication and authorization + * Rate limiting and caching + +Component Interactions +-------------------- + +The components interact through well-defined interfaces: + +1. **UI to Application Layer** + + * Event-driven interaction + * State management through Streamlit session state + * Asynchronous processing for long-running tasks + +2. **Application to Data Layer** + + * Repository pattern for data access + * Transaction management + * Connection pooling + +3. **Application to External Services** + + * API client abstractions + * Retry mechanisms + * Circuit breakers for fault tolerance + +Data Flow +-------- + +The typical data flow in the system: + +1. User submits content generation request through UI +2. Application layer validates and processes the request +3. AI provider is called to generate content +4. Generated content is stored in the database +5. Content is returned to the UI for display and editing +6. Analytics data is collected and stored + +Deployment Architecture +--------------------- + +AI-Writer supports multiple deployment models: + +1. **Single-User Deployment** + + * Local installation + * SQLite database + * Local file storage + +2. **Multi-User Deployment** + + * Docker-based deployment + * PostgreSQL database + * Shared file storage + * Load balancing + +3. **Cloud Deployment** + + * Kubernetes orchestration + * Cloud database services + * Object storage + * Auto-scaling + +Technology Stack +-------------- + +The AI-Writer platform is built on the following technologies: + +1. **Frontend** + + * Streamlit + * HTML/CSS/JavaScript + * Plotly for visualizations + +2. **Backend** + + * Python 3.9+ + * FastAPI for API endpoints + * SQLAlchemy for ORM + * ChromaDB for vector storage + +3. **AI and ML** + + * OpenAI GPT models + * Google Gemini + * Hugging Face transformers + * Sentence transformers for embeddings + +4. **Infrastructure** + + * Docker + * Docker Compose + * Kubernetes (for cloud deployment) + * GitHub Actions for CI/CD \ No newline at end of file diff --git a/docs/architecture/security.rst b/docs/architecture/security.rst new file mode 100644 index 00000000..7930522c --- /dev/null +++ b/docs/architecture/security.rst @@ -0,0 +1,335 @@ +Security Architecture +=================== + +This document outlines the security architecture of the AI-Writer platform, including authentication, authorization, data protection, and security best practices. + +Authentication and Authorization +------------------------------ + +User Authentication +~~~~~~~~~~~~~~~~~ + +AI-Writer implements a multi-layered authentication system: + +1. **Password-based Authentication** + + * Passwords are hashed using bcrypt with appropriate work factors + * Password complexity requirements are enforced + * Account lockout after multiple failed attempts + * Password reset via secure email workflow + +2. **API Key Authentication** + + * Unique API keys for programmatic access + * Keys are stored using secure hashing + * Keys can be scoped to specific permissions + * Keys can be revoked at any time + +3. **OAuth 2.0 (for multi-user deployments)** + + * Standard OAuth 2.0 flow with authorization code + * JWT tokens with appropriate expiration + * Refresh token rotation + * PKCE for public clients + +Authorization Model +~~~~~~~~~~~~~~~~ + +The platform uses a role-based access control (RBAC) system: + +1. **User Roles** + + * **Admin**: Full system access + * **Editor**: Content creation and editing + * **Viewer**: Read-only access to content + * **API**: Programmatic access with limited scope + +2. **Permission Scopes** + + * `content:read`: View content + * `content:write`: Create and edit content + * `content:delete`: Delete content + * `user:read`: View user information + * `user:write`: Modify user information + * `settings:read`: View settings + * `settings:write`: Modify settings + * `api:manage`: Manage API keys + +3. **Resource-level Permissions** + + * Permissions are checked at the resource level + * Users can only access their own content + * Sharing functionality with explicit permissions + +Data Protection +------------- + +Encryption +~~~~~~~~~ + +1. **Data in Transit** + + * TLS 1.3 for all communications + * Strong cipher suites + * HSTS implementation + * Certificate pinning for API clients + +2. **Data at Rest** + + * Database encryption + * Encrypted file storage + * Secure key management + * Regular key rotation + +3. **Sensitive Data** + + * API keys and credentials are encrypted + * PII is encrypted with separate keys + * Encryption keys are properly secured + +API Key Security +~~~~~~~~~~~~~~ + +1. **Key Generation** + + * Keys are generated using cryptographically secure random functions + * Sufficient entropy (256 bits) + * Keys follow a consistent format for validation + +2. **Key Storage** + + * Only key hashes are stored in the database + * Secure comparison for validation + * Keys are never logged or exposed in error messages + +3. **Key Management** + + * Keys can be rotated regularly + * Unused keys are automatically expired + * Key usage is logged for audit purposes + +Secure Development Practices +-------------------------- + +Input Validation +~~~~~~~~~~~~~~ + +1. **API Input Validation** + + * All input is validated against schemas + * Type checking and constraint validation + * Protection against injection attacks + * Input sanitization where appropriate + +2. **Content Validation** + + * Content is scanned for malicious elements + * HTML/Markdown sanitization + * File upload validation and scanning + +3. **Error Handling** + + * Secure error handling that doesn't leak sensitive information + * Consistent error responses + * Detailed internal logging for troubleshooting + +Dependency Management +~~~~~~~~~~~~~~~~~~ + +1. **Dependency Scanning** + + * Regular scanning for vulnerable dependencies + * Automated updates for security patches + * Dependency pinning for stability + +2. **Minimal Dependencies** + + * Only necessary dependencies are included + * Regular dependency audits + * Preference for well-maintained libraries + +3. **Containerization** + + * Minimal base images + * Non-root container execution + * Image scanning for vulnerabilities + +Logging and Monitoring +-------------------- + +Security Logging +~~~~~~~~~~~~~~ + +1. **Authentication Events** + + * Login attempts (successful and failed) + * Password changes and resets + * API key creation and usage + * Session management events + +2. **Authorization Events** + + * Permission checks + * Access denials + * Privilege escalation + * Role changes + +3. **System Events** + + * Configuration changes + * Service starts and stops + * Database migrations + * Backup and restore operations + +Monitoring and Alerting +~~~~~~~~~~~~~~~~~~~~~ + +1. **Security Monitoring** + + * Real-time monitoring for suspicious activities + * Anomaly detection for unusual patterns + * Rate limiting and abuse detection + * Geographic anomaly detection + +2. **Performance Monitoring** + + * Resource usage tracking + * API response time monitoring + * Error rate monitoring + * Database performance tracking + +3. **Alerting** + + * Immediate alerts for security incidents + * Escalation procedures + * On-call rotation + * Incident response playbooks + +Compliance and Privacy +-------------------- + +Data Governance +~~~~~~~~~~~~~ + +1. **Data Classification** + + * Clear classification of data sensitivity + * Handling procedures for each classification + * Access controls based on classification + * Retention policies by data type + +2. **Data Minimization** + + * Only necessary data is collected + * Automatic data pruning + * Anonymization where possible + * Purpose limitation + +3. **User Consent** + + * Clear consent mechanisms + * Granular permission options + * Easy consent withdrawal + * Consent records + +Privacy Features +~~~~~~~~~~~~~ + +1. **User Privacy Controls** + + * Data export functionality + * Account deletion + * Privacy settings management + * Usage tracking opt-out + +2. **Data Portability** + + * Export in standard formats + * Complete data export + * Machine-readable formats + * Import capabilities + +3. **Transparency** + + * Clear privacy policy + * Data usage explanations + * Third-party data sharing disclosure + * Processing activities documentation + +Security Testing +-------------- + +Vulnerability Management +~~~~~~~~~~~~~~~~~~~~~ + +1. **Security Testing** + + * Regular penetration testing + * Static application security testing (SAST) + * Dynamic application security testing (DAST) + * Software composition analysis (SCA) + +2. **Bug Bounty Program** + + * Responsible disclosure policy + * Security researcher engagement + * Vulnerability triage process + * Remediation tracking + +3. **Security Reviews** + + * Code reviews with security focus + * Architecture security reviews + * Threat modeling + * Security design reviews + +Incident Response +~~~~~~~~~~~~~~~ + +1. **Incident Response Plan** + + * Defined incident response procedures + * Roles and responsibilities + * Communication templates + * Escalation paths + +2. **Breach Notification** + + * Legal compliance with notification requirements + * User communication plan + * Regulatory reporting procedures + * Post-incident analysis + +3. **Recovery Procedures** + + * Backup and restore testing + * Business continuity planning + * Disaster recovery procedures + * Service level objectives + +Security Roadmap +-------------- + +Planned Security Enhancements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. **Short-term (0-6 months)** + + * Implement multi-factor authentication + * Enhance API key management + * Improve security logging + * Conduct initial penetration test + +2. **Medium-term (6-12 months)** + + * Implement security information and event management (SIEM) + * Enhance data encryption + * Develop comprehensive security training + * Implement automated security testing in CI/CD + +3. **Long-term (12+ months)** + + * Achieve SOC 2 compliance + * Implement advanced threat protection + * Develop zero-trust architecture + * Enhance privacy features for international compliance \ No newline at end of file diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 00000000..86eb27f8 --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,39 @@ +Changelog +========= + +Version 0.1.0 (Initial Release) +----------------------------- + +* Initial release of AI-Writer +* Support for LinkedIn, Twitter, and blog content generation +* Basic web research capabilities +* SQLite database integration +* Streamlit UI + +Version 0.2.0 +----------- + +* Added Facebook content generation +* Enhanced web research with async crawling +* Improved UI with sidebar navigation +* Added basic analytics dashboard +* Vector database integration for semantic search + +Version 0.3.0 +----------- + +* Added YouTube content generation +* Integrated Google Gemini models +* Enhanced SEO tools +* Added content planning calendar +* Improved error handling and logging + +Version 0.4.0 (Current) +-------------------- + +* Added image generation capabilities +* Enhanced personalization options +* Improved database performance +* Added content versioning +* Enhanced analytics with visualization +* Added support for multiple AI providers \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..dd5d06ad --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,40 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'AI-Writer' +copyright = '2025, AJaySi' +author = 'AJaySi' + +version = '1.0' +release = '1.0' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx.ext.napoleon', + 'sphinx.ext.intersphinx', +] + +# Add path to the project +import os +import sys +sys.path.insert(0, os.path.abspath('..')) + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'sphinx_rtd_theme' +html_static_path = ['_static'] diff --git a/docs/contributing.rst b/docs/contributing.rst new file mode 100644 index 00000000..d2805538 --- /dev/null +++ b/docs/contributing.rst @@ -0,0 +1,5 @@ +Contributing +============ + +.. include:: ../CONTRIBUTING.md + :parser: myst_parser.sphinx_ \ No newline at end of file diff --git a/docs/developer/coding_standards.rst b/docs/developer/coding_standards.rst new file mode 100644 index 00000000..730e0416 --- /dev/null +++ b/docs/developer/coding_standards.rst @@ -0,0 +1,230 @@ +Coding Standards +=============== + +This document outlines the coding standards and best practices for contributing to the AI-Writer project. + +Code Style +--------- + +AI-Writer follows the PEP 8 style guide for Python code with some additional guidelines: + +1. **Indentation** + + * Use 4 spaces for indentation (no tabs) + * Continuation lines should align with the opening delimiter or be indented by 4 spaces + +2. **Line Length** + + * Maximum line length is 100 characters + * For docstrings and comments, limit to 80 characters + +3. **Imports** + + * Group imports in the following order: + 1. Standard library imports + 2. Related third-party imports + 3. Local application/library specific imports + * Within each group, imports should be sorted alphabetically + * Use absolute imports rather than relative imports + + Example: + + .. code-block:: python + + # Standard library + import os + import sys + from typing import Dict, List, Optional + + # Third-party + import numpy as np + import pandas as pd + import streamlit as st + + # Local + from lib.database import models + from lib.utils import helpers + +4. **Naming Conventions** + + * Classes: `CamelCase` + * Functions and variables: `snake_case` + * Constants: `UPPER_CASE` + * Private methods and variables: `_leading_underscore` + * Protected methods and variables: `__double_leading_underscore` + +5. **String Formatting** + + * Use f-strings for string formatting when possible + * For older Python versions, use `.format()` method + * Avoid using `%` formatting + + Example: + + .. code-block:: python + + # Preferred + name = "World" + greeting = f"Hello, {name}!" + + # Acceptable + greeting = "Hello, {}!".format(name) + + # Avoid + greeting = "Hello, %s!" % name + +Documentation +------------ + +1. **Docstrings** + + * Use Google-style docstrings + * All modules, classes, and functions should have docstrings + * Include type hints in function signatures + + Example: + + .. code-block:: python + + def generate_content(prompt: str, max_tokens: int = 100) -> str: + """Generate content using the AI model. + + Args: + prompt: The input prompt for content generation. + max_tokens: Maximum number of tokens to generate. + + Returns: + The generated content as a string. + + Raises: + ValueError: If the prompt is empty or max_tokens is negative. + """ + if not prompt: + raise ValueError("Prompt cannot be empty") + + if max_tokens < 0: + raise ValueError("max_tokens must be a positive integer") + + # Implementation... + return generated_content + +2. **Comments** + + * Use comments sparingly and only when necessary + * Focus on explaining "why" rather than "what" + * Keep comments up-to-date with code changes + +3. **Type Hints** + + * Use type hints for all function parameters and return values + * Use `Optional` for parameters that can be None + * Use `Union` for parameters that can be multiple types + * Use `Any` only when absolutely necessary + + Example: + + .. code-block:: python + + from typing import Dict, List, Optional, Union + + def process_data( + data: Union[Dict[str, str], List[str]], + config: Optional[Dict[str, str]] = None + ) -> List[str]: + """Process the input data.""" + # Implementation... + return processed_data + +Error Handling +------------- + +1. **Exceptions** + + * Use specific exception types rather than generic exceptions + * Handle exceptions at the appropriate level + * Include meaningful error messages + * Log exceptions with appropriate context + + Example: + + .. code-block:: python + + try: + result = api_client.fetch_data(query) + except ConnectionError as e: + logger.error(f"Failed to connect to API: {e}") + raise ServiceUnavailableError("API service is currently unavailable") from e + except ValueError as e: + logger.warning(f"Invalid query parameter: {e}") + raise InvalidParameterError(f"Invalid query parameter: {e}") from e + +2. **Validation** + + * Validate input parameters early + * Use assertions for internal checks (not for input validation) + * Return meaningful error messages for invalid inputs + +Testing +------ + +1. **Test Coverage** + + * Aim for at least 80% test coverage for new code + * Write unit tests for all new functions and classes + * Include integration tests for complex interactions + +2. **Test Organization** + + * Place tests in the `tests/` directory + * Mirror the package structure in the test directory + * Name test files with `test_` prefix + +3. **Test Naming** + + * Use descriptive test names that explain what is being tested + * Follow the pattern `test___` + + Example: + + .. code-block:: python + + def test_generate_content_empty_prompt_raises_value_error(): + """Test that generate_content raises ValueError for empty prompts.""" + with pytest.raises(ValueError, match="Prompt cannot be empty"): + generate_content("") + +Performance Considerations +------------------------ + +1. **Resource Usage** + + * Be mindful of memory usage, especially for large datasets + * Use generators and iterators for large data processing + * Consider using async functions for I/O-bound operations + +2. **Optimization** + + * Optimize for readability first, then performance + * Document performance-critical sections + * Include benchmarks for performance-sensitive code + +Security Best Practices +--------------------- + +1. **API Keys and Secrets** + + * Never hardcode API keys or secrets + * Use environment variables or secure storage + * Implement proper access controls for sensitive data + +2. **Input Validation** + + * Validate and sanitize all user inputs + * Use parameterized queries for database operations + * Implement proper authentication and authorization + +3. **Dependency Management** + + * Keep dependencies up-to-date + * Regularly check for security vulnerabilities + * Pin dependency versions for reproducibility \ No newline at end of file diff --git a/docs/developer/index.rst b/docs/developer/index.rst new file mode 100644 index 00000000..a5243393 --- /dev/null +++ b/docs/developer/index.rst @@ -0,0 +1,39 @@ +Developer Guide +============== + +This section provides comprehensive documentation for developers who want to contribute to or extend the AI-Writer platform. + +.. toctree:: + :maxdepth: 2 + :caption: Developer Documentation: + + setup + architecture + coding_standards + testing + extending + +Development Environment Setup +--------------------------- + +.. include:: setup.rst + +Architecture Overview +------------------- + +.. include:: architecture.rst + +Coding Standards +-------------- + +.. include:: coding_standards.rst + +Testing Guidelines +---------------- + +.. include:: testing.rst + +Extending AI-Writer +----------------- + +.. include:: extending.rst \ No newline at end of file diff --git a/docs/developer/setup.rst b/docs/developer/setup.rst new file mode 100644 index 00000000..455020e0 --- /dev/null +++ b/docs/developer/setup.rst @@ -0,0 +1,176 @@ +Development Environment Setup +============================ + +This guide will help you set up a development environment for contributing to the AI-Writer project. + +Prerequisites +------------ + +Before setting up the development environment, ensure you have the following installed: + +* Python 3.9 or higher +* Git +* A code editor (VS Code, PyCharm, etc.) +* Docker (optional, for containerized development) + +Setting Up the Development Environment +------------------------------------ + +1. **Clone the Repository** + + .. code-block:: bash + + git clone https://github.com/AJaySi/AI-Writer.git + cd AI-Writer + +2. **Create a Virtual Environment** + + .. code-block:: bash + + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + +3. **Install Development Dependencies** + + .. code-block:: bash + + pip install -r requirements.txt + pip install -r requirements-dev.txt # Install development dependencies + +4. **Set Up Pre-commit Hooks** + + .. code-block:: bash + + pip install pre-commit + pre-commit install + +5. **Configure Environment Variables** + + Create a `.env` file in the project root with the following variables: + + .. code-block:: bash + + # API Keys + OPENAI_API_KEY=your_openai_api_key + GOOGLE_API_KEY=your_google_api_key + + # Database Configuration + DB_PATH=sqlite:///./data/alwrity.db + VECTOR_DB_PATH=./data/vectordb + + # Development Settings + DEBUG=True + ENVIRONMENT=development + +6. **Initialize the Database** + + .. code-block:: bash + + python -c "from lib.database.db_manager import init_db; init_db()" + +7. **Run the Development Server** + + .. code-block:: bash + + streamlit run alwrity.py + +Development Workflow +------------------ + +1. **Create a Feature Branch** + + Always create a new branch for your changes: + + .. code-block:: bash + + git checkout -b feature/your-feature-name + +2. **Make Changes and Test** + + Implement your changes and test them thoroughly: + + .. code-block:: bash + + # Run tests + pytest + + # Run linting + flake8 + + # Run type checking + mypy . + +3. **Commit Changes** + + Follow the commit message conventions: + + .. code-block:: bash + + git add . + git commit -m "feat: add new feature" + +4. **Push Changes and Create a Pull Request** + + .. code-block:: bash + + git push origin feature/your-feature-name + + Then create a pull request on GitHub. + +Using Docker for Development +-------------------------- + +For containerized development: + +1. **Build the Development Container** + + .. code-block:: bash + + docker build -t alwrity-dev -f Dockerfile.dev . + +2. **Run the Development Container** + + .. code-block:: bash + + docker run -p 8501:8501 -v $(pwd):/app alwrity-dev + +3. **Using Docker Compose** + + .. code-block:: bash + + docker-compose -f docker-compose.dev.yml up + +Troubleshooting +------------- + +Common development setup issues: + +1. **Dependency Conflicts** + + If you encounter dependency conflicts, try: + + .. code-block:: bash + + pip install --upgrade pip + pip install -r requirements.txt --no-cache-dir + +2. **Database Migration Issues** + + If you encounter database migration issues: + + .. code-block:: bash + + # Reset the database + rm -rf ./data/alwrity.db + rm -rf ./data/vectordb + + # Reinitialize + python -c "from lib.database.db_manager import init_db; init_db()" + +3. **Streamlit Port Already in Use** + + If the Streamlit port is already in use: + + .. code-block:: bash + + streamlit run alwrity.py --server.port=8502 \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..64468a17 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,34 @@ +.. AI-Writer documentation master file, created by + sphinx-quickstart on Fri Apr 18 08:15:28 2025. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to AI-Writer's documentation! +===================================== + +AI-Writer (Alwrity) is an AI-powered content creation platform that helps you generate high-quality content for various platforms including blogs, social media, and marketing materials. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + introduction + installation + usage + api/index + developer/index + architecture/index + roadmap + contributing + changelog + +Features +-------- + +* Multi-platform content generation (LinkedIn, Twitter, Blog posts, etc.) +* AI-powered research and content optimization +* Database integration for content storage and retrieval +* Analytics dashboard for content performance +* Customizable templates and personalization options +* Integration with various AI providers (OpenAI, Google Gemini, etc.) + diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 00000000..14b285b9 --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,117 @@ +Installation +============ + +System Requirements +------------------ + +Before installing AI-Writer, ensure your system meets the following requirements: + +* Python 3.9 or higher +* 4GB RAM minimum (8GB recommended) +* 2GB free disk space +* Internet connection for AI API access + +Installation Methods +------------------ + +There are several ways to install and run AI-Writer: + +Method 1: Using pip (Recommended) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + + # Clone the repository + git clone https://github.com/AJaySi/AI-Writer.git + cd AI-Writer + + # Install dependencies + pip install -r requirements.txt + + # Run the application + streamlit run alwrity.py + +Method 2: Using Docker +~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + + # Clone the repository + git clone https://github.com/AJaySi/AI-Writer.git + cd AI-Writer + + # Build and run with Docker Compose + docker-compose up -d + +Method 3: Manual Installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you prefer to install dependencies manually: + +.. code-block:: bash + + # Clone the repository + git clone https://github.com/AJaySi/AI-Writer.git + cd AI-Writer + + # Create a virtual environment (optional but recommended) + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + + # Install core dependencies + pip install streamlit openai google-generativeai chromadb sqlalchemy + + # Install additional dependencies as needed + pip install beautifulsoup4 requests pandas matplotlib plotly + + # Run the application + streamlit run alwrity.py + +Configuration +------------ + +After installation, you'll need to configure AI-Writer with your API keys: + +1. Launch the application using `streamlit run alwrity.py` +2. Follow the setup wizard to configure: + - AI provider API keys (OpenAI, Google Gemini, etc.) + - Research tools settings + - Database configuration + - Personalization options + +The configuration will be saved and can be modified later through the settings page. + +Troubleshooting +-------------- + +Common Installation Issues +~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. **Dependency Conflicts** + + If you encounter dependency conflicts, try installing in a fresh virtual environment: + + .. code-block:: bash + + python -m venv fresh_venv + source fresh_venv/bin/activate + pip install -r requirements.txt + +2. **Port Already in Use** + + If Streamlit cannot start because the port is in use: + + .. code-block:: bash + + streamlit run alwrity.py --server.port=8501 + +3. **Database Connection Issues** + + Ensure you have proper permissions for creating and accessing database files: + + .. code-block:: bash + + # Check permissions + chmod 755 -R ./data + +For additional help, please refer to the project's GitHub issues page or contact the maintainers. \ No newline at end of file diff --git a/docs/introduction.rst b/docs/introduction.rst new file mode 100644 index 00000000..a2a8a6d8 --- /dev/null +++ b/docs/introduction.rst @@ -0,0 +1,56 @@ +Introduction +============ + +What is AI-Writer? +----------------- + +AI-Writer (Alwrity) is a comprehensive AI-powered content creation platform designed to help content creators, marketers, and businesses generate high-quality content efficiently. The platform leverages advanced language models and AI technologies to assist in creating various types of content, from social media posts to full-length articles. + +Key Features +----------- + +1. **Multi-Platform Content Generation** + + * LinkedIn content (posts, articles, profiles) + * Twitter/X posts and threads + * Blog articles and SEO-optimized content + * Marketing copy and email templates + +2. **AI Research Integration** + + * Web crawling for relevant information + * Content summarization + * Fact-checking capabilities + * Citation and reference management + +3. **Database Integration** + + * Content storage and retrieval + * Vector database for semantic search + * Content versioning and history + +4. **Analytics Dashboard** + + * Content performance metrics + * Usage statistics + * AI model performance analysis + +5. **Customization Options** + + * Personalized content templates + * Brand voice and tone settings + * Custom workflows + +6. **Multiple AI Provider Support** + + * OpenAI (GPT models) + * Google Gemini + * Anthropic Claude (coming soon) + * Local models (coming soon) + +Project History +-------------- + +AI-Writer was created to address the growing need for high-quality content creation at scale. The project aims to democratize access to advanced AI writing capabilities while maintaining a focus on quality, accuracy, and ethical content generation. + +The platform continues to evolve with new features and improvements based on user feedback and advancements in AI technology. \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..954237b9 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/roadmap.rst b/docs/roadmap.rst new file mode 100644 index 00000000..56b04f70 --- /dev/null +++ b/docs/roadmap.rst @@ -0,0 +1,374 @@ +Roadmap +======= + +This document outlines the planned development roadmap for the AI-Writer project, including upcoming features, improvements, and long-term goals. + +Status Indicators +--------------- + +- **In Progress**: Currently being developed +- **Planned**: Scheduled for upcoming development cycles +- **Researching**: Under investigation and evaluation +- **Completed**: Released and available + +Short-Term Goals (Q2 2025: April - June) +------------------------------------- + +1. **Core Platform Enhancements** + + * **Performance Optimization** (In Progress) + - Reduce content generation time by 30% + - Optimize memory usage for large content pieces + - Implement caching for frequently used research data + + * **Multi-language Support** (Planned) + - Add support for Spanish, French, and German content generation + - Implement language-specific research capabilities + - Create language-specific SEO optimization + + * **User Interface Refresh** (Planned) + - Redesign main dashboard for improved usability + - Implement dark mode + - Add customizable workspace layouts + +2. **AI Provider Integrations** + + * **Anthropic Claude Integration** (In Progress) + - Add support for Claude 3 models + - Optimize for long-form content generation + - Implement specialized prompting techniques + + * **Local LLM Support** (Planned) + - Integration with Ollama for local model deployment + - Support for Llama 3 and Mistral models + - Optimized inference for resource-constrained environments + + * **Model Fallback System** (Planned) + - Automatic failover between AI providers + - Smart routing based on content type + - Performance monitoring and optimization + +3. **Content Generation Improvements** + + * **Enhanced Blog Writer** (In Progress) + - Add support for more blog formats (listicles, how-to guides, etc.) + - Implement advanced outline generation + - Add competitor content analysis + + * **AI Script Writer** (Planned) + - Create specialized writer for video scripts + - Support multiple video formats (YouTube, TikTok, Instagram) + - Add scene breakdown and shot suggestions + + * **Technical Content Writer** (Planned) + - Specialized writer for technical documentation + - Code snippet generation and formatting + - Technical accuracy verification + +Medium-Term Goals (Q3 2025: July - September) +------------------------------------------ + +1. **Advanced Analytics** + + * **Analytics Dashboard** (Planned) + - Content performance tracking + - Usage statistics and insights + - AI model performance metrics + - Export options for analytics data + + * **Content Audit Tools** (Planned) + - Analyze existing content + - Identify improvement opportunities + - Generate update recommendations + - Content quality scoring + + * **Predictive Analytics** (Researching) + - Content performance prediction + - Trend analysis for content topics + - Audience engagement forecasting + +2. **Collaboration Features** + + * **Multi-user Platform** (Planned) + - Role-based access control + - Team workspaces for collaborative content creation + - User management and permissions + + * **Content Workflow** (Planned) + - Content review and approval workflows + - Comment and feedback system + - Version tracking and comparison + + * **Real-time Collaboration** (Researching) + - Simultaneous editing capabilities + - Presence indicators + - Change tracking and attribution + +3. **Integration Capabilities** + + * **Publishing Integrations** (Planned) + - WordPress plugin for direct publishing + - Integration with social media platforms + - CMS connectors (Drupal, Joomla, etc.) + + * **Marketing Platform Connections** (Planned) + - Email marketing platform integrations + - Marketing automation connections + - Analytics platform integrations + + * **API Expansion** (Researching) + - Comprehensive REST API + - Webhook integrations + - Developer documentation and SDKs + +4. **Content Research Tools** + + * **Advanced Web Research** (In Progress) + - Multi-source research aggregation + - Research depth controls + - Improve citation and source tracking + + * **Semantic SEO Tools** (Planned) + - Entity-based content optimization + - Topic cluster mapping + - Natural language query optimization + + * **Academic Research Integration** (Researching) + - Access to academic databases + - Citation generation + - Research paper summarization + +Long-Term Goals (Q4 2025 and Beyond) +-------------------------------- + +1. **AI and ML Enhancements** + + * **Multimodal Content Creation** (Researching) + - Integrated text, image, and video generation + - Cross-format content consistency + - Single-prompt multi-format generation + + * **Custom AI Models** (Researching) + - Fine-tuned models for specific content types + - Implement reinforcement learning from user feedback + - Domain-specific knowledge integration + + * **Voice and Audio Integration** (Researching) + - Voice-to-content conversion + - Content-to-voice generation + - Podcast and audio content creation + +2. **Enterprise Features** + + * **Enterprise Security** (Planned) + - Single sign-on (SSO) integration + - Advanced security controls + - Custom branding options + + * **Compliance and Governance** (Planned) + - Audit logging and compliance reporting + - Data retention and privacy controls + - Role-based permissions and workflows + + * **Enterprise Support** (Planned) + - SLA-based support options + - Dedicated customer success + - Custom training and onboarding + +3. **Content Ecosystem** + + * **AI Agent Ecosystem** (Researching) + - Specialized AI agents for different tasks + - Agent collaboration framework + - Custom agent creation + + * **Content Marketplace** (Researching) + - Templates and content frameworks + - Plugin system for extending functionality + - Community contributions and sharing + + * **Developer Platform** (Planned) + - API for third-party integrations + - Developer SDK for custom extensions + - Comprehensive documentation and examples + +4. **Advanced Personalization** + + * **Adaptive Content Generation** (Researching) + - User behavior-based recommendations + - Personalized content generation + - Learning from user preferences + + * **Audience Intelligence** (Planned) + - Audience segmentation and targeting + - Demographic and psychographic analysis + - Content optimization by audience + + * **Testing Framework** (Planned) + - A/B testing for content variations + - Performance measurement and analysis + - Automated optimization based on results + +5. **Global Expansion** + + * **Comprehensive Localization** (Planned) + - Support for 20+ languages + - Region-specific content templates + - Localized user interface + + * **International Compliance** (Planned) + - Compliance with international regulations + - Regional data storage options + - Privacy controls by region + + * **Global Community** (Researching) + - International user communities + - Region-specific support and resources + - Local partnerships and integrations + +Technical Debt and Infrastructure Improvements +------------------------------------------- + +In addition to new features, we plan to address the following technical debt items: + +1. **Code Quality** (In Progress) + + * Refactor core modules for better separation of concerns + * Implement consistent error handling + * Add comprehensive type hints + * Standardize logging across all modules + * Implement design patterns for maintainability + +2. **Testing Infrastructure** (Planned) + + * Implement CI/CD pipeline with GitHub Actions + * Increase test coverage to 80% + * Add integration and end-to-end tests + * Implement performance benchmarking + * Add security scanning and vulnerability testing + +3. **Documentation** (In Progress) + + * Complete internal code documentation + * Create comprehensive architecture diagrams + * Document all APIs and interfaces + * Create developer guides for each module + * Implement automated documentation generation + +4. **Dependency Management** (Planned) + + * Move from requirements.txt to Poetry + * Pin and audit dependencies + * Reduce unnecessary dependencies + * Implement dependency injection for better testability + * Create containerized development environment + +5. **Infrastructure Modernization** (Researching) + + * Containerization with Docker + * Kubernetes deployment for scalability + * Infrastructure as Code with Terraform + * Monitoring and observability stack + * Automated backup and disaster recovery + +Recently Completed Features +----------------------- + +The following features have been recently completed and are available in the current version: + +1. **Core Platform** (Completed) + + * **Google Gemini Integration** + - Added support for Google's Gemini Pro model + - Implemented efficient token usage + - Optimized for specific content types + + * **ChromaDB Vector Storage** + - Implemented vector database for semantic search + - Content similarity analysis + - Efficient content retrieval + + * **Streamlit UI Improvements** + - Enhanced user interface + - Better navigation and controls + - Improved mobile responsiveness + +2. **Content Generation** (Completed) + + * **AI News Article Writer** + - Specialized writer for news content + - Citation support for factual accuracy + - Balanced reporting capabilities + + * **SEO Optimization Tools** + - On-page SEO analysis + - Keyword optimization + - Meta description generator + +3. **Research Tools** (Completed) + + * **Tavily AI Research Integration** + - Added support for AI-powered web research + - Enhanced factual accuracy in content + - Improved research depth and breadth + + * **Exa Search Integration** + - Semantic search capabilities + - Relevant source discovery + - Research summarization + +Community Contributions +--------------------- + +We welcome community contributions in the following areas: + +1. **New Content Types** + + * Templates for specialized industries + * Support for additional platforms + * Niche content formats + * Industry-specific optimizations + +2. **Integrations** + + * Additional AI provider integrations + * CMS and publishing platform connectors + * Analytics and reporting tools + * Marketing automation platforms + +3. **Documentation and Examples** + + * Usage examples and tutorials + * Translations of documentation + * Case studies and best practices + * Video tutorials and demonstrations + +4. **Testing and Quality Assurance** + + * Bug reports and fixes + * Performance improvements + * Security audits + * Accessibility enhancements + +Feedback and Prioritization +------------------------- + +This roadmap is subject to change based on user feedback and community needs. We prioritize features based on: + +1. User impact and demand +2. Technical feasibility +3. Strategic alignment +4. Resource availability +5. Community interest + +To provide feedback on the roadmap or suggest new features, please: + +* Open an issue on GitHub +* Discuss in the community forums +* Contact the maintainers directly +* Join our monthly roadmap review calls + +We review and update the roadmap quarterly to ensure it reflects current priorities and progress. + +.. note:: + Last updated: April 18, 2025. For the most current roadmap, please visit our GitHub repository or project website. \ No newline at end of file diff --git a/docs/tutorials/advanced_content_generation.rst b/docs/tutorials/advanced_content_generation.rst new file mode 100644 index 00000000..4ffe2858 --- /dev/null +++ b/docs/tutorials/advanced_content_generation.rst @@ -0,0 +1,529 @@ +Advanced Content Generation Techniques +================================= + +This tutorial covers advanced techniques for generating high-quality content with AI-Writer. You'll learn how to leverage the platform's advanced features to create more sophisticated, targeted, and effective content. + +Prerequisites +------------ + +Before proceeding with this tutorial, you should: + +* Have completed the [Getting Started](getting_started.rst) tutorial +* Be familiar with basic content generation in AI-Writer +* Have configured your API keys for advanced features + +Advanced Research Techniques +-------------------------- + +Combining Multiple Research Sources +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For comprehensive research, combine multiple sources: + +1. **Configure Research Sources**: + + * Navigate to the "Research Settings" in the sidebar + * Enable multiple research providers: + * Tavily AI for factual information + * Exa for semantic search + * SerperDev for SERP data + * Custom URLs for specific sources + +2. **Set Research Parameters**: + + * Adjust depth for each source + * Set relevance thresholds + * Configure result limits + +3. **Execute Multi-Source Research**: + + * Use the "Advanced Research" button + * Review combined research results + * Save research for future use + +Example: + +.. code-block:: python + + # Example of multi-source research configuration + research_config = { + "tavily": {"enabled": True, "depth": "deep", "max_results": 5}, + "exa": {"enabled": True, "relevance_threshold": 0.7, "max_results": 3}, + "serper": {"enabled": True, "result_type": "organic", "max_results": 5}, + "custom_urls": ["https://example.com/resource1", "https://example.com/resource2"] + } + +Domain-Specific Research +~~~~~~~~~~~~~~~~~~~~~~ + +For specialized content, focus your research: + +1. **Domain Filtering**: + + * Specify domains to include or exclude + * Set domain authority thresholds + * Filter by publication date + +2. **Expert Sources**: + + * Include academic databases + * Add industry publications + * Include expert blogs and forums + +3. **Competitive Analysis**: + + * Research competitor content + * Identify content gaps + * Analyze top-performing content + +Advanced Content Structuring +-------------------------- + +Content Outlines with AI +~~~~~~~~~~~~~~~~~~~~~~ + +Create sophisticated content outlines: + +1. **Generate Advanced Outline**: + + * Use the "AI Outline Generator" + * Specify content type and depth + * Include research insights + +2. **Customize Outline Structure**: + + * Rearrange sections for better flow + * Add custom sections + * Specify section priorities + +3. **Generate from Outline**: + + * Use the outline as a framework + * Generate content section by section + * Maintain consistency across sections + +Example outline structure: + +.. code-block:: text + + # Advanced Blog Post Structure + + ## Introduction + - Hook: Surprising statistic or question + - Context: Brief background on topic + - Thesis: Main argument or purpose + - Roadmap: What the reader will learn + + ## Section 1: Current Landscape + - Industry overview + - Key challenges + - Recent developments + + ## Section 2: Core Concepts + - Definition and explanation + - Historical context + - Practical applications + + ## Section 3: Case Studies + - Real-world example 1 + - Real-world example 2 + - Lessons learned + + ## Section 4: Implementation Guide + - Step-by-step process + - Tools and resources + - Common pitfalls + + ## Section 5: Future Trends + - Emerging technologies + - Predicted developments + - Opportunities and challenges + + ## Conclusion + - Summary of key points + - Actionable takeaways + - Call to action + +Multi-Perspective Content +~~~~~~~~~~~~~~~~~~~~~~~ + +Generate content that presents multiple viewpoints: + +1. **Configure Perspective Settings**: + + * Select "Multi-Perspective" mode + * Define the perspectives to include + * Set balance between perspectives + +2. **Generate Balanced Content**: + + * AI creates content with multiple viewpoints + * Each perspective is fairly represented + * Supporting evidence for each view + +3. **Review and Refine**: + + * Check for bias in presentation + * Ensure fair treatment of all perspectives + * Add additional nuance if needed + +Advanced Tone and Style Control +----------------------------- + +Fine-Tuning Content Voice +~~~~~~~~~~~~~~~~~~~~~~~ + +Precisely control the voice of your content: + +1. **Advanced Tone Settings**: + + * Access the "Style Controls" panel + * Adjust primary and secondary tones + * Set tone intensity (1-10) + +2. **Voice Customization**: + + * Sentence length variation + * Paragraph structure + * Vocabulary complexity + * Rhetorical devices + +3. **Brand Voice Alignment**: + + * Upload brand voice guidelines + * Select from voice presets + * Create custom voice profiles + +Example tone configuration: + +.. code-block:: python + + # Example tone configuration + tone_config = { + "primary_tone": "authoritative", + "secondary_tone": "conversational", + "intensity": 7, + "sentence_length": { + "average": "medium", + "variation": "high" + }, + "vocabulary": { + "complexity": "moderate", + "industry_specific": True, + "jargon_level": "low" + }, + "rhetorical_devices": ["analogies", "questions", "data_points"] + } + +Audience-Targeted Content +~~~~~~~~~~~~~~~~~~~~~~~ + +Create content specifically tailored to your audience: + +1. **Audience Definition**: + + * Create detailed audience personas + * Specify demographics and psychographics + * Define knowledge level and interests + +2. **Content Adaptation**: + + * Adjust complexity for audience + * Include relevant examples and references + * Address audience pain points + +3. **Engagement Optimization**: + + * Customize calls to action + * Adjust persuasion techniques + * Incorporate audience-specific language + +Advanced SEO Optimization +----------------------- + +Semantic SEO Enhancement +~~~~~~~~~~~~~~~~~~~~~~ + +Optimize content for semantic search: + +1. **Topic Cluster Mapping**: + + * Identify primary and related topics + * Map semantic relationships + * Create content that covers the topic comprehensively + +2. **Entity Optimization**: + + * Identify key entities in your content + * Establish entity relationships + * Include structured data for entities + +3. **Natural Language Optimization**: + + * Optimize for natural language queries + * Include question-answer pairs + * Implement conversational content elements + +Example entity mapping: + +.. code-block:: json + + { + "main_entity": "Sustainable Gardening", + "related_entities": [ + { + "name": "Composting", + "relationship": "technique", + "properties": ["benefits", "methods", "materials"] + }, + { + "name": "Rainwater Harvesting", + "relationship": "technique", + "properties": ["systems", "benefits", "implementation"] + }, + { + "name": "Native Plants", + "relationship": "component", + "properties": ["benefits", "examples", "care"] + } + ] + } + +Competitive Content Analysis +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create content that outperforms competitors: + +1. **Competitor Content Audit**: + + * Analyze top-ranking content + * Identify content gaps + * Determine competitive advantages + +2. **Content Enhancement**: + + * Add missing information + * Improve depth and breadth + * Enhance user experience elements + +3. **Differentiation Strategy**: + + * Develop unique angles + * Add proprietary insights + * Include better examples and case studies + +Advanced Content Types +------------------- + +Interactive Content Generation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create engaging interactive content: + +1. **Quiz Generation**: + + * Generate topic-relevant questions + * Create multiple-choice options + * Develop explanations for answers + +2. **Interactive Calculators**: + + * Define calculation parameters + * Generate explanation text + * Create result interpretations + +3. **Decision Trees**: + + * Map decision points + * Generate content for each path + * Create conditional logic + +Example quiz generation: + +.. code-block:: python + + # Example quiz generation parameters + quiz_params = { + "topic": "Digital Marketing", + "difficulty": "intermediate", + "question_types": ["multiple_choice", "true_false"], + "num_questions": 10, + "include_explanations": True, + "scoring_system": "standard" + } + +Multimedia Content Integration +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enhance content with multimedia elements: + +1. **Image Generation**: + + * Generate relevant images with AI + * Create custom illustrations + * Design infographics from content + +2. **Video Script Creation**: + + * Generate video scripts from content + * Create storyboards + * Develop shot lists + +3. **Audio Content**: + + * Generate podcast scripts + * Create audio summaries + * Develop voice content + +Advanced Workflow Techniques +------------------------- + +Content Versioning and A/B Testing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create multiple versions to test effectiveness: + +1. **Version Generation**: + + * Create content variants + * Vary headlines, intros, or CTAs + * Maintain consistent core message + +2. **A/B Test Setup**: + + * Define test parameters + * Set success metrics + * Configure distribution + +3. **Performance Analysis**: + + * Compare version performance + * Identify winning elements + * Create optimized final version + +Collaborative Content Creation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Work with teams on content: + +1. **Role-Based Generation**: + + * Assign specific roles to team members + * Generate content components by role + * Combine components into final piece + +2. **Review and Feedback**: + + * Share content for review + * Collect structured feedback + * Implement revisions + +3. **Version Control**: + + * Track content changes + * Manage multiple drafts + * Merge contributions + +Content Repurposing +~~~~~~~~~~~~~~~~ + +Efficiently repurpose content across formats: + +1. **Format Transformation**: + + * Convert blog posts to social media + * Transform articles into email sequences + * Create presentations from long-form content + +2. **Audience Adaptation**: + + * Adjust content for different audiences + * Modify tone and complexity + * Update examples and references + +3. **Channel Optimization**: + + * Optimize for specific platforms + * Adjust format and structure + * Incorporate platform-specific elements + +Example repurposing workflow: + +.. code-block:: text + + Original Blog Post + ├── Social Media Posts + │ ├── LinkedIn Article + │ ├── Twitter Thread + │ └── Instagram Carousel + ├── Email Sequence + │ ├── Welcome Email + │ ├── Deep Dive Emails (3) + │ └── Call-to-Action Email + ├── Video Content + │ ├── YouTube Script + │ └── Short-Form Video Scripts + └── Downloadable Asset + ├── PDF Guide + └── Infographic + +Advanced Analytics and Optimization +-------------------------------- + +Content Performance Prediction +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Predict content performance before publishing: + +1. **AI Performance Analysis**: + + * Analyze content against success factors + * Compare to high-performing content + * Identify improvement opportunities + +2. **Engagement Prediction**: + + * Estimate reader engagement + * Predict time on page + * Calculate potential conversion rate + +3. **SEO Ranking Prediction**: + + * Analyze keyword competitiveness + * Evaluate content completeness + * Predict ranking potential + +Iterative Content Optimization +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Continuously improve content performance: + +1. **Performance Monitoring**: + + * Track key performance metrics + * Identify underperforming sections + * Monitor user behavior + +2. **AI-Driven Optimization**: + + * Generate improvement suggestions + * Enhance underperforming sections + * Update with fresh information + +3. **Periodic Refreshes**: + + * Schedule content updates + * Incorporate new research + * Refresh examples and statistics + +Conclusion +--------- + +By mastering these advanced content generation techniques, you can create more sophisticated, targeted, and effective content with AI-Writer. Experiment with different approaches to find what works best for your specific content needs and audience. + +Next Steps +--------- + +* Explore [AI Agents for Content Creation](ai_agents.rst) +* Learn about [Content Distribution Strategies](content_distribution.rst) +* Discover [Advanced SEO Techniques](advanced_seo.rst) \ No newline at end of file diff --git a/docs/tutorials/getting_started.rst b/docs/tutorials/getting_started.rst new file mode 100644 index 00000000..adb5f137 --- /dev/null +++ b/docs/tutorials/getting_started.rst @@ -0,0 +1,283 @@ +Getting Started with AI-Writer +========================== + +This tutorial will guide you through the process of setting up and using AI-Writer for the first time. By the end, you'll be able to generate your first piece of AI-powered content. + +Prerequisites +------------ + +Before you begin, make sure you have the following: + +1. **Python Environment**: + + * Python 3.10 or higher installed + * pip package manager + * Virtual environment tool (optional but recommended) + +2. **System Dependencies**: + + * Windows: Microsoft Visual C++ Build Tools + * Linux: build-essential and python3-dev packages + * Rust compiler (for certain dependencies) + +3. **API Keys** (optional for some features): + + * OpenAI API key + * Google API key (for Gemini) + * Tavily API key (for web research) + * Stability AI key (for image generation) + +Installation +----------- + +Follow these steps to install AI-Writer: + +1. **Clone the Repository**: + + .. code-block:: bash + + git clone https://github.com/AJaySi/AI-Writer.git + cd AI-Writer + +2. **Create a Virtual Environment** (optional but recommended): + + .. code-block:: bash + + # Using venv + python -m venv venv + + # Activate on Windows + venv\\Scripts\\activate + + # Activate on Linux/Mac + source venv/bin/activate + +3. **Install Dependencies**: + + .. code-block:: bash + + pip install -r requirements.txt + +4. **Check System Dependencies**: + + .. code-block:: bash + + python install_dependencies.py + +5. **Launch the Application**: + + .. code-block:: bash + + streamlit run alwrity.py + +The application should now be running at http://localhost:8501. + +Configuration +------------ + +Before using AI-Writer, you'll need to configure it with your preferences and API keys: + +1. **Open the Sidebar**: + + * Click on the ">" icon in the top-left corner of the application + +2. **Configure API Keys**: + + * Enter your API keys for the services you plan to use + * API keys are stored securely in your local environment + +3. **Set Language and Region**: + + * Choose your preferred language and region for content generation + * This affects the research results and content style + +4. **Configure UI Settings**: + + * Adjust the UI theme and layout according to your preferences + +Your First Content Generation +---------------------------- + +Let's create your first blog post using AI-Writer: + +1. **Select the Blog Writer**: + + * From the main menu, select "AI Blog Writer" + +2. **Enter Keywords**: + + * Type in 2-3 keywords related to your topic + * Example: "artificial intelligence content creation" + +3. **Configure Options**: + + * Select blog length (Short, Medium, Long) + * Choose whether to include web research (recommended) + * Select your target audience + +4. **Generate Content**: + + * Click the "Generate Blog" button + * Wait for the AI to research and create your content + +5. **Review and Edit**: + + * Review the generated content + * Make any necessary edits or adjustments + * Use the regenerate option for specific sections if needed + +6. **Export Your Content**: + + * Copy the content to your clipboard + * Export as Markdown or HTML + * Save to your local database + +Example: Generating a Blog Post +------------------------------ + +Here's a step-by-step example of generating a blog post about "sustainable gardening": + +1. Select "AI Blog Writer" from the main menu + +2. Enter the following information: + + * Keywords: "sustainable gardening techniques" + * Blog Length: Medium + * Include Web Research: Yes + * Target Audience: Home Gardeners + +3. Click "Generate Blog" and wait for the process to complete + +4. Review the generated blog, which should include: + + * An engaging introduction + * Several sections on sustainable gardening techniques + * Practical tips and advice + * A conclusion with key takeaways + +5. Edit any sections that need improvement + +6. Export your blog post for publishing + +Using Web Research +---------------- + +Web research enhances your content with factual information: + +1. **Enable Web Research**: + + * Make sure the "Include Web Research" option is checked + +2. **Select Research Sources**: + + * Choose from available research providers: + * Google Search + * Tavily AI + * Exa Search + * Custom URLs + +3. **Adjust Research Depth**: + + * Select how deep the research should go + * More depth means more comprehensive but slower results + +4. **Review Research Results**: + + * See what sources were used in your content + * Check the research summary for key points + +5. **Regenerate with Different Research**: + + * If needed, you can regenerate with different research parameters + +Customizing Content Style +----------------------- + +AI-Writer allows you to customize the style of your content: + +1. **Tone Selection**: + + * Choose from tones like Professional, Casual, Informative, etc. + * The tone affects the writing style and vocabulary + +2. **Content Structure**: + + * Select different content structures: + * Problem-Solution + * How-To Guide + * Listicle + * Comparison + * Story-based + +3. **Writing Style**: + + * Adjust parameters like: + * Sentence length + * Paragraph density + * Technical level + * Use of examples + +4. **SEO Optimization**: + + * Enable SEO optimization for better search visibility + * Adjust keyword density and placement + +Troubleshooting +-------------- + +If you encounter issues, try these solutions: + +1. **Application Won't Start**: + + * Check Python version (must be 3.10+) + * Verify all dependencies are installed + * Check for error messages in the terminal + +2. **API Connection Issues**: + + * Verify API keys are entered correctly + * Check internet connection + * Ensure API services are available + +3. **Content Generation Fails**: + + * Try with simpler keywords + * Disable web research temporarily + * Check API usage limits + +4. **Slow Performance**: + + * Reduce research depth + * Generate shorter content + * Close other resource-intensive applications + +Next Steps +--------- + +Now that you've created your first piece of content, here are some next steps: + +1. **Explore Other Writers**: + + * Try the Social Media Writer + * Experiment with the Email Writer + * Create a YouTube script + +2. **Use SEO Tools**: + + * Analyze your content for SEO + * Generate meta descriptions + * Create structured data + +3. **Plan Your Content**: + + * Use the Content Calendar feature + * Generate content ideas for the month + * Create a content strategy + +4. **Learn Advanced Features**: + + * Check out the advanced tutorials + * Explore API integration + * Try the AI agents feature + +For more detailed information, refer to the [User Guide](../user_guide/index.rst) and [API Documentation](../api/index.rst). \ No newline at end of file diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst new file mode 100644 index 00000000..fef3e10f --- /dev/null +++ b/docs/tutorials/index.rst @@ -0,0 +1,99 @@ +Tutorials +========= + +Welcome to the AI-Writer tutorials section. These step-by-step guides will help you learn how to use the platform effectively, from basic content generation to advanced techniques. + +.. toctree:: + :maxdepth: 2 + :caption: Tutorials: + + getting_started + advanced_content_generation + seo_optimization + social_media_content + email_marketing + content_planning + ai_agents + api_integration + +Beginner Tutorials +---------------- + +If you're new to AI-Writer, start with these tutorials: + +* :doc:`getting_started` - Set up AI-Writer and create your first content +* :doc:`seo_optimization` - Learn how to optimize your content for search engines +* :doc:`social_media_content` - Create engaging content for social media platforms + +Intermediate Tutorials +-------------------- + +Once you're familiar with the basics, try these tutorials: + +* :doc:`advanced_content_generation` - Master advanced content creation techniques +* :doc:`email_marketing` - Generate effective email marketing campaigns +* :doc:`content_planning` - Plan and organize your content strategy + +Advanced Tutorials +--------------- + +For power users looking to maximize their AI-Writer experience: + +* :doc:`ai_agents` - Use AI agents for specialized content creation +* :doc:`api_integration` - Integrate AI-Writer with your existing tools and workflows + +Quick Start Guides +--------------- + +Short guides for specific tasks: + +1. **Creating a Blog Post** + + * Select "AI Blog Writer" from the main menu + * Enter your keywords and select options + * Click "Generate Blog" and wait for results + * Edit and export your content + +2. **Generating Social Media Content** + + * Choose the social media platform + * Enter your topic or product information + * Select tone and style + * Generate multiple post options + +3. **Optimizing Content for SEO** + + * Create your content or import existing text + * Use the "SEO Optimizer" tool + * Review and implement suggestions + * Generate meta descriptions and titles + +Video Tutorials +------------ + +Check out our video tutorials for visual learning: + +* [Getting Started with AI-Writer](https://www.youtube.com/watch?v=example1) +* [Advanced Content Generation Techniques](https://www.youtube.com/watch?v=example2) +* [SEO Optimization with AI-Writer](https://www.youtube.com/watch?v=example3) + +Tutorial Roadmap +-------------- + +Not sure where to start? Follow this recommended learning path: + +1. Complete the :doc:`getting_started` tutorial +2. Try creating content with the :doc:`seo_optimization` guide +3. Explore social media content creation with :doc:`social_media_content` +4. Learn advanced techniques with :doc:`advanced_content_generation` +5. Develop your content strategy with :doc:`content_planning` +6. Explore automation with :doc:`ai_agents` and :doc:`api_integration` + +Need Help? +--------- + +If you need additional assistance: + +* Check the [FAQ](../faq.rst) for common questions +* Visit the [Community Forum](https://community.alwrity.com) +* Contact support at support@alwrity.com \ No newline at end of file diff --git a/docs/usage.rst b/docs/usage.rst new file mode 100644 index 00000000..5be1abd9 --- /dev/null +++ b/docs/usage.rst @@ -0,0 +1,160 @@ +Usage Guide +=========== + +Getting Started +-------------- + +After installing and configuring AI-Writer, you can access the application through your web browser. The application is organized into several sections: + +1. **Dashboard**: Overview of your content and analytics +2. **Content Creation**: Tools for generating different types of content +3. **Research**: AI-powered research tools +4. **Analytics**: Content performance metrics +5. **Settings**: Configuration options + +Basic Workflow +------------- + +The typical workflow for using AI-Writer consists of the following steps: + +1. **Select Content Type** + + Choose the type of content you want to create from the sidebar menu: + + * LinkedIn Post + * LinkedIn Article + * Blog Post + * Twitter/X Post + * Email Template + * SEO Content + * And more... + +2. **Configure Content Parameters** + + Set the parameters for your content: + + * Topic or title + * Target audience + * Tone and style + * Length + * Keywords (for SEO) + * Additional context + +3. **Generate Content** + + Click the "Generate" button to create your content. The AI will process your request and generate content based on your parameters. + +4. **Review and Edit** + + Review the generated content and make any necessary edits. You can: + + * Regenerate specific sections + * Adjust tone or style + * Add or remove information + * Check facts and references + +5. **Save and Export** + + Save your content to the database and export it in your preferred format: + + * Plain text + * Markdown + * HTML + * PDF (if configured) + +Feature Guides +------------- + +LinkedIn Content Creation +~~~~~~~~~~~~~~~~~~~~~~~ + +To create LinkedIn content: + +1. Select "LinkedIn Writer" from the sidebar +2. Choose the content type (post, article, profile, etc.) +3. Fill in the required parameters +4. Click "Generate" +5. Review and edit the content +6. Save or export for posting + +Blog Content Creation +~~~~~~~~~~~~~~~~~~~ + +For blog posts and articles: + +1. Select "Blog Writer" from the sidebar +2. Enter the blog topic, target audience, and keywords +3. Choose the structure (how-to, listicle, opinion, etc.) +4. Set the desired length and tone +5. Click "Generate" +6. Review, edit, and export + +SEO Optimization +~~~~~~~~~~~~~~ + +To optimize content for search engines: + +1. Create your content using any of the content generators +2. Go to the "SEO Tools" section +3. Enter your target keywords and URL (if applicable) +4. Run the SEO analysis +5. Apply the suggested optimizations to your content + +Research Assistant +~~~~~~~~~~~~~~~~ + +To use the AI research assistant: + +1. Go to the "Research" section +2. Enter your research topic or question +3. Select research sources (web, academic, news, etc.) +4. Set the depth and breadth of research +5. Click "Research" +6. Review the findings and save or export the research summary + +Analytics Dashboard +~~~~~~~~~~~~~~~~~ + +To analyze your content performance: + +1. Navigate to the "Analytics" section +2. View overall metrics or select specific content +3. Analyze performance by content type, date range, or other filters +4. Export reports as needed + +Advanced Features +--------------- + +Custom Templates +~~~~~~~~~~~~~~ + +You can create and save custom templates for frequently used content types: + +1. Go to "Settings" > "Templates" +2. Click "Create New Template" +3. Configure the template parameters +4. Save the template +5. Access your templates from the content creation screens + +Batch Processing +~~~~~~~~~~~~~~ + +For generating multiple content pieces at once: + +1. Go to "Batch Processing" in the sidebar +2. Upload a CSV file with content parameters +3. Configure batch settings +4. Start the batch process +5. Download the results when complete + +API Integration +~~~~~~~~~~~~~ + +AI-Writer provides API endpoints for integration with other tools: + +1. Go to "Settings" > "API" +2. Generate an API key +3. View the API documentation +4. Use the provided endpoints in your applications + +For detailed API documentation, see the :ref:`API Reference ` section. \ No newline at end of file diff --git a/lib/alwrity_ui/keyword_web_researcher.py b/lib/alwrity_ui/keyword_web_researcher.py index d5294ed8..7158d985 100644 --- a/lib/alwrity_ui/keyword_web_researcher.py +++ b/lib/alwrity_ui/keyword_web_researcher.py @@ -138,7 +138,7 @@ def do_web_research(): placeholder="Enter your Serper API key", help="Get your key at https://serper.dev" ) - test_key = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving") + test_key = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving", key="test_serper_key") with serper_col2: if st.button("Save Serper", use_container_width=True): if serper_key: @@ -183,7 +183,7 @@ def do_web_research(): placeholder="Enter your Metaphor API key", help="Get your key at https://metaphor.systems" ) - test_metaphor = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving") + test_metaphor = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving", key="test_metaphor_key") with metaphor_col2: if st.button("Save Metaphor", use_container_width=True): if metaphor_key: @@ -227,7 +227,7 @@ def do_web_research(): placeholder="Enter your Tavily API key", help="Get your key at https://tavily.com" ) - test_tavily = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving") + test_tavily = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving", key="test_tavily_key") with tavily_col2: if st.button("Save Tavily", use_container_width=True): if tavily_key: @@ -271,7 +271,7 @@ def do_web_research(): placeholder="Enter your Firecrawl API key", help="Get your key at https://firecrawl.co" ) - test_firecrawl = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving") + test_firecrawl = st.checkbox("Test API key before saving", value=False, help="Validate the API key before saving", key="test_firecrawl_key") with firecrawl_col2: if st.button("Save Firecrawl", use_container_width=True): if firecrawl_key: diff --git a/lib/utils/api_key_manager/components/alwrity_integrations.py b/lib/utils/api_key_manager/components/alwrity_integrations.py index 981b2f21..9f11b2e1 100644 --- a/lib/utils/api_key_manager/components/alwrity_integrations.py +++ b/lib/utils/api_key_manager/components/alwrity_integrations.py @@ -2,6 +2,7 @@ import streamlit as st from loguru import logger +import os from typing import Dict, Any from ..manager import APIKeyManager from .base import render_navigation_buttons, render_step_indicator, render_tab_style @@ -161,6 +162,15 @@ def render_alwrity_integrations(api_key_manager: APIKeyManager) -> Dict[str, Any } } + # Set INTEGRATION_DONE to True in .env file and environment + try: + with open('.env', 'a') as f: + f.write("\nINTEGRATION_DONE=True") + os.environ['INTEGRATION_DONE'] = "True" + logger.info("Set INTEGRATION_DONE=True in .env and environment") + except Exception as e: + logger.error(f"Failed to set INTEGRATION_DONE: {str(e)}") + # Update progress and move to next step st.session_state['current_step'] = 6 st.rerun() diff --git a/lib/utils/api_key_manager/components/base.py b/lib/utils/api_key_manager/components/base.py index feff7169..1953b012 100644 --- a/lib/utils/api_key_manager/components/base.py +++ b/lib/utils/api_key_manager/components/base.py @@ -62,10 +62,11 @@ def render_step_indicator(current_step: int, total_steps: int) -> None: steps = [ ("🔑", "AI LLM", 1), - ("👤", "AI Research", 2), - ("🎨", "Personalization", 3), - ("🔄", "Integrations", 4), - ("✅", "Complete", 5) + ("🔍", "Website Analysis", 2), + ("👤", "AI Research", 3), + ("🎨", "Personalization", 4), + ("🔄", "Integrations", 5), + ("✅", "Complete", 6) ] html = '
' diff --git a/lib/utils/api_key_manager/components/final_setup.py b/lib/utils/api_key_manager/components/final_setup.py index 5dc2654a..6f7ea881 100644 --- a/lib/utils/api_key_manager/components/final_setup.py +++ b/lib/utils/api_key_manager/components/final_setup.py @@ -45,37 +45,139 @@ def render_final_setup(api_key_manager: APIKeyManager) -> Dict[str, Any]: """ logger.info("[render_final_setup] Rendering final setup component") - st.markdown("### Step 5: Final Setup") + st.markdown("### Step 6: Final Setup & Validation") # Load main config main_config = load_main_config() - # Display configuration summary - st.markdown("#### Configuration Summary") + # Create tabs for each step + tabs = st.tabs([ + "Step 1: AI LLM Setup", + "Step 2: Website Analysis", + "Step 3: AI Research", + "Step 4: Personalization", + "Step 5: Integrations" + ]) - # Blog Content Characteristics - st.markdown("##### Blog Content Characteristics") - blog_settings = main_config.get("Blog Content Characteristics", {}) - st.write(f"- Blog Length: {blog_settings.get('Blog Length', '2000')}") - st.write(f"- Blog Tone: {blog_settings.get('Blog Tone', 'Professional')}") - st.write(f"- Blog Demographic: {blog_settings.get('Blog Demographic', 'Professional')}") - st.write(f"- Blog Type: {blog_settings.get('Blog Type', 'Informational')}") + # Step 1: AI LLM Setup + with tabs[0]: + st.markdown("#### AI LLM Configuration") + + # Get API keys from environment + openai_key = os.getenv('OPENAI_API_KEY', 'Not configured') + gemini_key = os.getenv('GEMINI_API_KEY', 'Not configured') + anthropic_key = os.getenv('ANTHROPIC_API_KEY', 'Not configured') + mistral_key = os.getenv('MISTRAL_API_KEY', 'Not configured') + + # Display API keys (masked) + st.markdown("##### API Keys") + col1, col2 = st.columns(2) + + with col1: + st.markdown(f"**OpenAI API Key:** {'*' * 8}{openai_key[-4:] if openai_key != 'Not configured' else ''}") + st.markdown(f"**Google Gemini API Key:** {'*' * 8}{gemini_key[-4:] if gemini_key != 'Not configured' else ''}") + + with col2: + st.markdown(f"**Anthropic API Key:** {'*' * 8}{anthropic_key[-4:] if anthropic_key != 'Not configured' else ''}") + st.markdown(f"**Mistral API Key:** {'*' * 8}{mistral_key[-4:] if mistral_key != 'Not configured' else ''}") - # LLM Options - st.markdown("##### LLM Options") - llm_settings = main_config.get("LLM Options", {}) - st.write(f"- GPT Provider: {llm_settings.get('GPT Provider', 'google')}") - st.write(f"- Model: {llm_settings.get('Model', 'gemini-1.5-flash-latest')}") - st.write(f"- Temperature: {llm_settings.get('Temperature', 0.7)}") - st.write(f"- Max Tokens: {llm_settings.get('Max Tokens', 4000)}") + # Step 2: Website Analysis + with tabs[1]: + st.markdown("#### Website Analysis Configuration") + + # Get website URL from environment + website_url = os.getenv('WEBSITE_URL', 'Not configured') + + # Display website URL + st.markdown("##### Website URL") + st.markdown(f"**Website URL:** {website_url}") + + # Display website analysis settings + st.markdown("##### Analysis Settings") + st.markdown("Website analysis settings will be used to understand your content style and preferences.") - # Personalization Settings - st.markdown("##### Personalization Settings") - personalization = main_config.get("personalization", {}) - st.write(f"- Writing Tone: {personalization.get('writing_tone', 'Professional')}") - st.write(f"- Target Audience: {personalization.get('target_audience', 'General')}") - st.write(f"- Content Type: {personalization.get('content_type', 'Blog Posts')}") + # Step 3: AI Research + with tabs[2]: + st.markdown("#### AI Research Configuration") + + # Get research API keys from environment + serpapi_key = os.getenv('SERPAPI_KEY', 'Not configured') + tavily_key = os.getenv('TAVILY_API_KEY', 'Not configured') + metaphor_key = os.getenv('METAPHOR_API_KEY', 'Not configured') + firecrawl_key = os.getenv('FIRECRAWL_API_KEY', 'Not configured') + + # Display API keys (masked) + st.markdown("##### Research API Keys") + col1, col2 = st.columns(2) + + with col1: + st.markdown(f"**SerpAPI Key:** {'*' * 8}{serpapi_key[-4:] if serpapi_key != 'Not configured' else ''}") + st.markdown(f"**Tavily API Key:** {'*' * 8}{tavily_key[-4:] if tavily_key != 'Not configured' else ''}") + + with col2: + st.markdown(f"**Metaphor API Key:** {'*' * 8}{metaphor_key[-4:] if metaphor_key != 'Not configured' else ''}") + st.markdown(f"**Firecrawl API Key:** {'*' * 8}{firecrawl_key[-4:] if firecrawl_key != 'Not configured' else ''}") + # Step 4: Personalization + with tabs[3]: + st.markdown("#### Personalization Configuration") + + # Display personalization settings from main config + with st.popover("Blog Content Characteristics", help="Click to see details about blog content settings"): + st.markdown("##### Blog Content Characteristics") + blog_settings = main_config.get("Blog Content Characteristics", {}) + st.write(f"- Blog Length: {blog_settings.get('Blog Length', '2000')}") + st.write(f"- Blog Tone: {blog_settings.get('Blog Tone', 'Professional')}") + st.write(f"- Blog Demographic: {blog_settings.get('Blog Demographic', 'Professional')}") + st.write(f"- Blog Type: {blog_settings.get('Blog Type', 'Informational')}") + st.write(f"- Blog Language: {blog_settings.get('Blog Language', 'English')}") + st.write(f"- Blog Output Format: {blog_settings.get('Blog Output Format', 'markdown')}") + st.markdown("These settings define the overall structure and style of your blog content.") + + with st.popover("Blog Images Details", help="Click to see details about image generation settings"): + st.markdown("##### Blog Images Details") + image_settings = main_config.get("Blog Images Details", {}) + st.write(f"- Image Generation Model: {image_settings.get('Image Generation Model', 'stable-diffusion')}") + st.write(f"- Number of Blog Images: {image_settings.get('Number of Blog Images', 1)}") + st.markdown("These settings control how images are generated for your blog posts.") + + with st.popover("LLM Options", help="Click to see details about language model settings"): + st.markdown("##### LLM Options") + llm_settings = main_config.get("LLM Options", {}) + st.write(f"- GPT Provider: {llm_settings.get('GPT Provider', 'google')}") + st.write(f"- Model: {llm_settings.get('Model', 'gemini-1.5-flash-latest')}") + st.write(f"- Temperature: {llm_settings.get('Temperature', 0.7)}") + st.write(f"- Top-p: {llm_settings.get('Top-p', 0.9)}") + st.write(f"- Max Tokens: {llm_settings.get('Max Tokens', 4000)}") + st.write(f"- Frequency Penalty: {llm_settings.get('Frequency Penalty', 1.0)}") + st.write(f"- Presence Penalty: {llm_settings.get('Presence Penalty', 1.0)}") + st.markdown("These settings control the behavior of the language model used for content generation.") + + with st.popover("Search Engine Parameters", help="Click to see details about search engine settings"): + st.markdown("##### Search Engine Parameters") + search_settings = main_config.get("Search Engine Parameters", {}) + st.write(f"- Geographic Location: {search_settings.get('Geographic Location', 'us')}") + st.write(f"- Search Language: {search_settings.get('Search Language', 'en')}") + st.write(f"- Number of Results: {search_settings.get('Number of Results', 10)}") + st.write(f"- Time Range: {search_settings.get('Time Range', 'anytime')}") + st.markdown("These settings control how search engines are used for research and content creation.") + + # Step 5: Integrations + with tabs[4]: + st.markdown("#### ALwrity Integrations Configuration") + + # Display integrations settings + st.markdown("##### Website Platforms") + st.info("WordPress integration will be available in the next update") + st.info("Wix integration will be available in the next update") + + st.markdown("##### Social Media") + st.info("Facebook integration will be available in the next update") + st.info("Instagram integration will be available in the next update") + + st.markdown("##### Analytics Tools") + st.info("Google Search Console integration will be available in the next update") + # Navigation buttons col1, col2 = st.columns(2) @@ -90,37 +192,37 @@ def render_final_setup(api_key_manager: APIKeyManager) -> Dict[str, Any]: if st.button("Complete Setup →"): logger.info("[render_final_setup] User clicked complete setup") try: - # Verify all required API keys are present and valid - is_valid = check_all_api_keys(api_key_manager) + # Log the current API keys in the manager + logger.info("[render_final_setup] Current API keys in manager:") + for key, value in api_key_manager.api_keys.items(): + if value: + logger.info(f" - {key}: {'*' * 8}{value[-4:]}") + else: + logger.info(f" - {key}: Not set") - if not is_valid: - st.error("⚠️ Some required API keys are missing") - st.markdown("### Missing API Keys and Impact") - - # Display impact messages - st.warning("⚠️ Missing AI Provider: At least one AI provider (OpenAI, Google Gemini, Anthropic Claude, or Mistral) is required.") - st.warning("⚠️ Missing Research Provider: At least one research provider (SerpAPI, Tavily, Metaphor, or Firecrawl) is required.") - - st.markdown(""" -
-

Required Keys:

-
    -
  • At least one AI provider (OpenAI, Google Gemini, Anthropic Claude, or Mistral)
  • -
  • At least one research provider (SerpAPI, Tavily, Metaphor, or Firecrawl)
  • -
-

Please configure the required keys before proceeding.

-
- """, unsafe_allow_html=True) - return {"current_step": 6, "changes_made": True} + # Log environment variables + logger.info("[render_final_setup] Checking environment variables:") + for key in os.environ.keys(): + if any(provider in key for provider in ['API_KEY', 'SERPAPI', 'TAVILY', 'METAPHOR', 'FIRECRAWL']): + value = os.getenv(key) + if value: + logger.info(f" - {key}: {'*' * 8}{value[-4:]}") + else: + logger.error(f" - {key}: Not set") - # Save final configuration - if not os.path.exists("lib/workspace/alwrity_config"): - os.makedirs("lib/workspace/alwrity_config") - config_path = os.path.join("lib", "workspace", "alwrity_config", "main_config.json") with open(config_path, 'w') as f: json.dump(main_config, f, indent=4) + # Set FINAL_SETUP_COMPLETE to True in .env file and environment + try: + with open('.env', 'a') as f: + f.write("\nFINAL_SETUP_COMPLETE=True") + os.environ['FINAL_SETUP_COMPLETE'] = "True" + logger.info("Set FINAL_SETUP_COMPLETE=True in .env and environment") + except Exception as e: + logger.error(f"Failed to set FINAL_SETUP_COMPLETE: {str(e)}") + # Show success message with HTML formatting st.markdown("""
@@ -133,11 +235,11 @@ def render_final_setup(api_key_manager: APIKeyManager) -> Dict[str, Any]: st.session_state['setup_completed'] = True # Redirect to main application - st.switch_page("alwrity.py") + st.rerun() except Exception as e: error_msg = f"Error completing setup: {str(e)}" logger.error(f"[render_final_setup] {error_msg}") st.error(error_msg) - return {"current_step": 5, "changes_made": True} + return {"current_step": 6, "changes_made": True} \ No newline at end of file diff --git a/lib/utils/api_key_manager/components/personalization_setup.py b/lib/utils/api_key_manager/components/personalization_setup.py index 7f332052..3b19ae33 100644 --- a/lib/utils/api_key_manager/components/personalization_setup.py +++ b/lib/utils/api_key_manager/components/personalization_setup.py @@ -4,6 +4,7 @@ import streamlit as st from loguru import logger import sys import json +import os from typing import Dict, Any from ..manager import APIKeyManager from ....web_crawlers.async_web_crawler import AsyncWebCrawlerService @@ -495,6 +496,15 @@ def render_personalization_setup(api_key_manager: APIKeyManager) -> Dict[str, An } if save_main_config(main_config): + # Set PERSONALIZATION_DONE to True in .env file and environment + try: + with open('.env', 'a') as f: + f.write("\nPERSONALIZATION_DONE=True") + os.environ['PERSONALIZATION_DONE'] = "True" + logger.info("Set PERSONALIZATION_DONE=True in .env and environment") + except Exception as e: + logger.error(f"Failed to set PERSONALIZATION_DONE: {str(e)}") + st.success("✅ Your personalization settings have been saved successfully!") else: st.error("Unable to save settings. Please try again.") @@ -702,8 +712,20 @@ def render_personalization_setup(api_key_manager: APIKeyManager) -> Dict[str, An st.success("Configuration saved successfully!") # Navigation buttons with correct arguments - if render_navigation_buttons(3, 4, changes_made=True): - st.session_state.current_step = 4 + if render_navigation_buttons(4, 6, changes_made=True): + # Set PERSONALIZATION_DONE to False if not already set to True + if 'PERSONALIZATION_DONE' not in os.environ or os.environ['PERSONALIZATION_DONE'] != "True": + try: + with open('.env', 'a') as f: + f.write("\nPERSONALIZATION_DONE=False") + os.environ['PERSONALIZATION_DONE'] = "False" + logger.info("Set PERSONALIZATION_DONE=False in .env and environment") + except Exception as e: + logger.error(f"Failed to set PERSONALIZATION_DONE: {str(e)}") + + # Update the current step to 5 (ALwrity integrations) + st.session_state.current_step = 5 + logger.info("Moving to step 5: ALwrity integrations") st.rerun() - return {"current_step": 3, "changes_made": True} \ No newline at end of file + return {"current_step": 4, "changes_made": True} \ No newline at end of file diff --git a/lib/utils/api_key_manager/components/website_setup.py b/lib/utils/api_key_manager/components/website_setup.py index f3548ff9..ff260ee7 100644 --- a/lib/utils/api_key_manager/components/website_setup.py +++ b/lib/utils/api_key_manager/components/website_setup.py @@ -9,6 +9,7 @@ import sys from typing import Dict, Any from ..manager import APIKeyManager from .base import render_navigation_buttons +import os # Configure logger to output to both file and stdout logger.remove() # Remove default handler @@ -45,6 +46,24 @@ def render_website_setup(api_key_manager: APIKeyManager) -> Dict[str, Any]: url = st.text_input("Enter your website URL, if you own one", placeholder="https://example.com") logger.info(f"[render_website_setup] URL input value: {url}") + # Save URL to .env file + try: + if url: + # Save to .env file + with open('.env', 'a') as f: + f.write(f"\nWEBSITE_URL={url}") + # Set environment variable + os.environ['WEBSITE_URL'] = url + logger.info(f"[render_website_setup] Saved website URL to .env: {url}") + else: + # Set default value if no URL provided + with open('.env', 'a') as f: + f.write("\nWEBSITE_URL=no_website_provided") + os.environ['WEBSITE_URL'] = "no_website_provided" + logger.info("[render_website_setup] Set default website URL: no_website_provided") + except Exception as e: + logger.error(f"[render_website_setup] Failed to save website URL: {str(e)}") + analyze_type = st.radio( "Analysis Type", ["Basic Website Analysis", "Full Website Analysis with SEO"], diff --git a/lib/utils/api_key_manager/manager.py b/lib/utils/api_key_manager/manager.py index 2897c1be..3f66fbaa 100644 --- a/lib/utils/api_key_manager/manager.py +++ b/lib/utils/api_key_manager/manager.py @@ -119,17 +119,48 @@ class APIKeyManager: def load_api_keys(self): """Load API keys from environment variables.""" - logger.info("[APIKeyManager.load_api_keys] Loading API keys from environment") try: - # Load from environment variables - self.api_keys = { - "openai": os.getenv("OPENAI_API_KEY", ""), - "google": os.getenv("GOOGLE_API_KEY", ""), - "tavily": os.getenv("TAVILY_API_KEY", ""), - "metaphor": os.getenv("METAPHOR_API_KEY", ""), - "mistral": os.getenv("MISTRAL_API_KEY", "") - } - logger.info("[APIKeyManager.load_api_keys] Successfully loaded API keys") + logger.info("[APIKeyManager.load_api_keys] Loading API keys from environment") + + # Get the current working directory and .env file path + current_dir = os.getcwd() + env_path = os.path.join(current_dir, '.env') + logger.info(f"[APIKeyManager.load_api_keys] Looking for .env file at: {env_path}") + + # Check if .env file exists + if not os.path.exists(env_path): + logger.warning(f"[APIKeyManager.load_api_keys] .env file not found at {env_path}") + return + + # Load environment variables + load_dotenv(env_path, override=True) + logger.debug("[APIKeyManager.load_api_keys] Environment variables loaded") + + # Define all possible API key providers + all_providers = [ + # AI Providers + 'OPENAI_API_KEY', + 'GEMINI_API_KEY', + 'ANTHROPIC_API_KEY', + 'MISTRAL_API_KEY', + # Research Providers + 'SERPAPI_KEY', + 'TAVILY_API_KEY', + 'METAPHOR_API_KEY', + 'FIRECRAWL_API_KEY' + ] + + # Load API keys from environment variables + for provider in all_providers: + value = os.getenv(provider) + if value: + self.api_keys[provider] = value + logger.info(f"[APIKeyManager.load_api_keys] Loaded {provider} from environment") + else: + logger.debug(f"[APIKeyManager.load_api_keys] {provider} not found in environment") + + logger.info(f"[APIKeyManager.load_api_keys] Loaded {len(self.api_keys)} API keys") + except Exception as e: logger.error(f"[APIKeyManager.load_api_keys] Error loading API keys: {str(e)}") diff --git a/lib/utils/api_key_manager/validation.py b/lib/utils/api_key_manager/validation.py index a8dd812b..c0ef73cb 100644 --- a/lib/utils/api_key_manager/validation.py +++ b/lib/utils/api_key_manager/validation.py @@ -30,7 +30,7 @@ def check_all_api_keys(api_key_manager: APIKeyManager) -> bool: return False # Load environment variables - load_dotenv(env_path) + load_dotenv(env_path, override=True) # Add override=True to ensure variables are reloaded logger.debug("Environment variables loaded") # Log all environment variables (without their values) @@ -59,7 +59,17 @@ def check_all_api_keys(api_key_manager: APIKeyManager) -> bool: has_ai_provider = any(os.getenv(key) for key in ai_providers) if not has_ai_provider: logger.warning("No AI provider API key found") - return False + # Check if keys are in the API key manager + if hasattr(api_key_manager, 'get_api_key'): + for provider in ai_providers: + key = api_key_manager.get_api_key(provider) + if key: + logger.info(f"Found {provider} in API key manager") + has_ai_provider = True + break + + if not has_ai_provider: + return False else: logger.success("✓ At least one AI provider key found") @@ -83,11 +93,59 @@ def check_all_api_keys(api_key_manager: APIKeyManager) -> bool: has_research_provider = any(os.getenv(key) for key in research_providers) if not has_research_provider: logger.warning("No research provider API key found") - return False + # Check if keys are in the API key manager + if hasattr(api_key_manager, 'get_api_key'): + for provider in research_providers: + key = api_key_manager.get_api_key(provider) + if key: + logger.info(f"Found {provider} in API key manager") + has_research_provider = True + break + + if not has_research_provider: + return False else: logger.success("✓ At least one research provider key found") - logger.success("All required API keys validated successfully!") + # Step 3: Check for website URL + logger.info("Checking website URL...") + website_url = os.getenv('WEBSITE_URL') + if not website_url: + logger.warning("No website URL found in environment variables") + return False + else: + logger.success(f"✓ Website URL found: {website_url}") + + # Step 4: Check for personalization status + logger.info("Checking personalization status...") + if 'PERSONALIZATION_DONE' not in os.environ: + logger.warning("PERSONALIZATION_DONE environment variable is not defined") + return False + else: + logger.success(f"✓ Personalization status: {os.environ['PERSONALIZATION_DONE']}") + + # Step 5: Check for integration status + logger.info("Checking integration status...") + if 'INTEGRATION_DONE' not in os.environ: + logger.warning("INTEGRATION_DONE environment variable is not defined") + return False + else: + logger.success(f"✓ Integration status: {os.environ['INTEGRATION_DONE']}") + + # Step 6: Check for final setup status + logger.info("Checking final setup status...") + if 'FINAL_SETUP_COMPLETE' not in os.environ: + logger.warning("FINAL_SETUP_COMPLETE environment variable is not defined") + return False + else: + final_setup_status = os.environ['FINAL_SETUP_COMPLETE'] + if final_setup_status.lower() == 'true': + logger.success("✓ Final setup completed successfully") + else: + logger.warning("Final setup validation failed") + return False + + logger.success("All required API keys and setup steps validated successfully!") return True except Exception as e: diff --git a/lib/workspace/alwrity_config/main_config.json b/lib/workspace/alwrity_config/main_config.json index 9ad590df..cbe9e4b9 100644 --- a/lib/workspace/alwrity_config/main_config.json +++ b/lib/workspace/alwrity_config/main_config.json @@ -17,7 +17,6 @@ "Temperature": 0.7, "Top-p": 0.9, "Max Tokens": 4000, - "N": 1, "Frequency Penalty": 1.0, "Presence Penalty": 1.0 }, @@ -25,8 +24,6 @@ "Geographic Location": "us", "Search Language": "en", "Number of Results": 10, - "Time Range": "anytime", - "Include Domains": "", - "Similar URL": "" + "Time Range": "anytime" } } \ No newline at end of file