Navusas / KeyVox

Selected Text --> Clipboard --> Speech-to-text --> ChatGPT --> Result --> Pasted text
0 stars 0 forks source link

Feature #2

Open Navusas opened 11 months ago

Navusas commented 11 months ago
flowchart TD;
  id1["Speech to Text"] ---> id2[["Submit request"]]
  id2 --> id4["Summarize & Sanitize user request (ChatGPT 3.5 call)"]
  id4 --> id3["Classify query (metadata + keywords + intent)"]
  id4 --> id5["Choose a predefined prompt by intent & dynamically update it"]
  id5 --> id6["Send request to OpenAI"]
  id6 --> id7["Stream response back (text-to-speech) to user"]
  id6 --> id8["Classify response (metadata + keywords + intent)"]
  id8 --> id20["Store in db"]
  id3 --> id20
  id6 --> id20
  id20 --"Build context (previous metadata + keywords = intents)"--> id5

Think about:

  1. Do we need to call ChatGPT 3.5 at "Choose a predefined prompt by intent & dynamically update it" step?
  2. Time & price constraints - am I relying too much on OpenAI?
  3. UI - we have db for metadata & intents. We also have db for conversation history. Can these be hold together?
  4. User preferences / configuration - it would be good if we could build a profile for user (i.e. "User A tends to ask questions about topic B,D,E, hence, we will use prompt ...")
Navusas commented 11 months ago
classDiagram
    Application --> UI
    UI --> UserController
    UI --> RequestController
    UI --> ResponseController
    UI --> TextToSpeechService
    UI --> SpeechToTextService
    UserController --> SessionController
    RequestController --> ChatGPTManager
    RequestController --> QueryClassifier
    RequestController --> PreProcessorManager
    ResponseController --> OpenAIApiManager
    ResponseController --> ResponseClassifier
    ResponseController --> PostProcessorManager
    OpenAIApiManager --> OpenAIClient
    RequestController --> ErrorManager
    ResponseController --> ErrorManager
    SessionController --> DatabaseManager
    RequestController --> DatabaseManager
    ResponseController --> DatabaseManager
    PreProcessorManager --> PreProcessor
    PostProcessorManager --> PostProcessor
    PromptManager --> DynamicPromptGenerator
    ChatGPTManager --> PromptManager

    class Application {
        +Start()
    }

    class UI {
        +DisplaySessions()
        +StreamResponseToUser()
        +ShowError()
        +BindKeyboardShortcuts()
        +CaptureSpeechInput()
    }

    class TextToSpeechService {
        +ConvertTextToSpeech()
    }

    class SpeechToTextService {
        +ConvertSpeechToText()
    }

    class UserController {
        +StartSession()
        +EndSession()
    }

    class SessionController {
        +GetSessionHistory()
        +StoreSessionData()
    }

    class RequestController {
        +HandleUserRequest()
    }

    class ResponseController {
        +HandleResponseData()
    }

    class OpenAIApiManager {
        +SendRequestToOpenAI()
        +StreamResponseFromOpenAI()
    }

    class OpenAIClient {
        +PostRequest()
        +GetResponse()
    }

    class ChatGPTManager {
        +SummarizeAndSanitize()
        +GeneratePrompt()
    }

    class QueryClassifier {
        +ClassifyQuery()
    }

    class ResponseClassifier {
        +ClassifyResponse()
    }

    class ErrorManager {
        +HandleError()
    }

    class DatabaseManager {
        +Store()
        +Retrieve()
    }

    class PreProcessorManager {
        +ManagePreProcessors()
    }

    class PreProcessor {
        <<interface>>
        +PreProcess()
    }

    class PostProcessorManager {
        +ManagePostProcessors()
    }

    class PostProcessor {
        <<interface>>
        +PostProcess()
    }

    class PromptManager {
        +ChoosePrompt()
    }

    class DynamicPromptGenerator {
        +GenerateBasedOnContext()
    }
Navusas commented 11 months ago

Or:

classDiagram
    OpenAiApiManager --> IOpenAiClient
    OpenAiApiManager --> IPreprocessor
    OpenAiApiManager --> IPostprocessor
    OpenAiApiManager --> ErrorManager
    OpenAiApiManager --> DataManager
    OpenAiApiManager --> IPromptProvider
    IOpenAiClient <|.. OpenAiClientReal
    IPreprocessor <|.. SanitizePreprocessor
    IPreprocessor <|.. SummarizePreprocessor
    IPostprocessor <|.. MetadataPostprocessor
    IPostprocessor <|.. IntentPostprocessor
    IPromptProvider <|.. DefaultPromptProvider
    IPromptProvider <|.. AdvancedPromptProvider

    class OpenAiApiManager {
        +RequestToOpenAi()
    }

    class IOpenAiClient {
        <<interface>>
        +SendRequest()
    }

    class OpenAiClientReal {
        +SendRequest()
    }

    class IPreprocessor {
        <<interface>>
        +Process()
    }

    class SanitizePreprocessor {
        +Process()
    }

    class SummarizePreprocessor {
        +Process()
    }

    class IPostprocessor {
        <<interface>>
        +Process()
    }

    class MetadataPostprocessor {
        +Process()
    }

    class IntentPostprocessor {
        +Process()
    }

    class ErrorManager {
        +HandleError()
    }

    class DataManager {
        +StoreData()
    }

    class IPromptProvider {
        <<interface>>
        +GetPrompt()
    }

    class DefaultPromptProvider {
        +GetPrompt()
    }

    class AdvancedPromptProvider {
        +GetPrompt()
    }
Navusas commented 11 months ago

Maybe useful CHatgpt3.5 prompt: here