WIP - UI, Audio, firecrawl, long-form - V0.5

This commit is contained in:
ajaysi
2024-06-20 22:48:52 +05:30
parent 899abad1ba
commit 074ddf6210
12 changed files with 206 additions and 131 deletions

View File

@@ -2,6 +2,8 @@ import os
import re
import sys
import streamlit as st
from streamlit_mic_recorder import speech_to_text
import tempfile
from pathlib import Path
import configparser
@@ -10,7 +12,6 @@ import uuid
from PIL import Image
from PyPDF2 import PdfReader
from docx import Document
from loguru import logger
logger.remove()
logger.add(sys.stdout,
@@ -19,7 +20,6 @@ logger.add(sys.stdout,
)
from rich import print
from lib.ai_web_researcher.gpt_online_researcher import gpt_web_researcher
from lib.ai_web_researcher.metaphor_basic_neural_web_search import metaphor_find_similar
from lib.ai_writers.keywords_to_blog_streamlit import write_blog_from_keywords
@@ -41,11 +41,40 @@ from lib.gpt_providers.text_to_image_generation.main_generate_image_from_prompt
from lib.content_planning_calender.content_planning_agents_alwrity_crew import ai_agents_planner
def record_voice(language="en"):
# https://github.com/B4PT0R/streamlit-mic-recorder?tab=readme-ov-file#example
state = st.session_state
if "text_received" not in state:
state.text_received = []
text = speech_to_text(
start_prompt="🎙Record🔊",
stop_prompt="🔇Stop Recording🚨",
language=language,
use_container_width=True,
just_once=False,
)
if text:
state.text_received.append(text)
result = ""
for text in state.text_received:
result += text
state.text_received = []
return result if result else None
def is_youtube_link(text):
if text is not None:
youtube_regex = re.compile(r'(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})')
return youtube_regex.match(text)
def is_web_link(text):
if text is not None:
web_regex = re.compile(r'(https?://)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)')
@@ -87,10 +116,11 @@ def process_input(input_text, uploaded_file):
return "video_file"
return None
def blog_from_keyword():
""" Input blog keywords, research and write a factual blog."""
st.title("Blog Content Writer")
col1, col2 = st.columns([2, 1.5])
col1, col2, col3 = st.columns([2, 1.5, 0.5])
with col1:
user_input = st.text_area('**👇Enter Keywords/Title/YouTube Link/Web URLs**',
help='Provide keywords, titles, YouTube links, or web URLs to generate content.',
@@ -104,6 +134,10 @@ def blog_from_keyword():
uploaded_file = st.file_uploader("**👇Attach files (Audio, Video, Image, Document)**",
type=["txt", "pdf", "docx", "jpg", "jpeg", "png", "mp3", "wav", "mp4", "mkv", "avi"],
help='Attach files such as audio, video, images, or documents.')
with col3:
user_input = record_voice()
if user_input:
st.info(user_input)
temp_file_path = None
if uploaded_file is not None:

View File

@@ -1,6 +1,14 @@
import os
import sys
import json
from pathlib import Path
from loguru import logger
logger.remove()
logger.add(sys.stdout,
colorize=True,
format="<level>{level}</level>|<green>{file}:{line}:{function}</green>| {message}"
)
def read_return_config_section(config_section):
""" read_return_config_section