temporary fix to config cache

This commit is contained in:
LUIS NOVO 2024-11-01 17:06:10 -03:00
parent cc9b0ac68c
commit b89250d3ca
18 changed files with 664 additions and 587 deletions

View file

@ -6,6 +6,8 @@ In a world dominated by Artificial Intelligence, having the ability to think
Open Notebook empowers you to manage your research, generate AI-assisted notes, and interact with your content—on your terms.
Learn more about our project at [https://www.open-notebook.ai](https://www.open-notebook.ai)
## ⚙️ Setting Up
Go to the [Setup Guide](docs/SETUP.md) to learn how to set up the tool in details.

View file

@ -31,28 +31,28 @@ source_insights:
- name: "Summarize"
insight_type: "Content Summary"
description: "Summarize the content"
transformations:
patterns:
- patterns/makeitdense
- patterns/summarize
- name: "Key Insights"
insight_type: "Key Insights"
description: "Extracts a list of the Key Insights of the content"
transformations:
patterns:
- patterns/keyinsights
- name: "Make it Dense"
insight_type: "Dense Representation"
description: "Create a dense representation of the content"
transformations:
patterns:
- patterns/makeitdense
- name: "Analyze Paper"
insight_type: "Paper Analysis"
description: "Analyze the paper and provide a quick summary"
transformations:
patterns:
- patterns/analyze_paper
- name: "Reflection"
insight_type: "Reflection Questions"
description: "Generates a list of insightful questions to provoke reflection"
transformations:
patterns:
- patterns/reflection_questions
```

View file

@ -36,18 +36,20 @@ PODCASTS_FOLDER = f"{DATA_FOLDER}/podcasts"
os.makedirs(PODCASTS_FOLDER, exist_ok=True)
DEFAULT_MODELS = DefaultModels.load()
if DEFAULT_MODELS.default_embedding_model:
EMBEDDING_MODEL = get_model(
DEFAULT_MODELS.default_embedding_model, model_type="embedding"
def load_default_models():
default_models = DefaultModels.load()
embedding_model = (
get_model(default_models.default_embedding_model, model_type="embedding")
if default_models.default_embedding_model
else None
)
else:
EMBEDDING_MODEL = None
if DEFAULT_MODELS.default_speech_to_text_model:
SPEECH_TO_TEXT_MODEL = get_model(
DEFAULT_MODELS.default_speech_to_text_model, model_type="speech_to_text"
speech_to_text_model = (
get_model(
default_models.default_speech_to_text_model, model_type="speech_to_text"
)
if default_models.default_speech_to_text_model
else None
)
else:
SPEECH_TO_TEXT_MODEL = None
return default_models, embedding_model, speech_to_text_model

View file

@ -68,7 +68,9 @@ class ObjectModel(BaseModel):
return None
def save(self) -> None:
from open_notebook.config import EMBEDDING_MODEL
from open_notebook.config import load_default_models
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
try:
logger.debug(f"Validating {self.__class__.__name__}")

View file

@ -5,7 +5,7 @@ from langchain_core.runnables.config import RunnableConfig
from loguru import logger
from pydantic import BaseModel, Field, field_validator
from open_notebook.config import EMBEDDING_MODEL
from open_notebook.config import load_default_models
from open_notebook.database.repository import (
repo_create,
repo_query,
@ -140,6 +140,8 @@ class Source(ObjectModel):
raise DatabaseOperationError(e)
def vectorize(self) -> None:
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
try:
if not self.full_text:
return
@ -189,6 +191,8 @@ class Source(ObjectModel):
raise DatabaseOperationError("Failed to search sources")
def add_insight(self, insight_type: str, content: str) -> Any:
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
if not insight_type or not content:
raise InvalidInputError("Insight type and content must be provided")
try:
@ -209,6 +213,8 @@ class Source(ObjectModel):
# todo: move this to content processing pipeline as a major graph
def generate_toc_and_title(self) -> "Source":
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
try:
config = RunnableConfig(configurable=dict(thread_id=self.id))
result = toc_graph.invoke({"content": self.full_text}, config=config)

View file

@ -9,10 +9,12 @@ from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from typing_extensions import TypedDict
from open_notebook.config import DEFAULT_MODELS, LANGGRAPH_CHECKPOINT_FILE
from open_notebook.config import LANGGRAPH_CHECKPOINT_FILE, load_default_models
from open_notebook.domain.notebook import Notebook
from open_notebook.graphs.utils import run_pattern
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class ThreadState(TypedDict):
messages: Annotated[list, add_messages]

View file

@ -4,7 +4,7 @@ from math import ceil
from loguru import logger
from pydub import AudioSegment
from open_notebook.config import SPEECH_TO_TEXT_MODEL
from open_notebook.config import load_default_models
from open_notebook.graphs.content_processing.state import SourceState
# future: parallelize the transcription process
@ -72,6 +72,8 @@ def split_audio(input_file, segment_length_minutes=15, output_prefix=None):
def extract_audio(data: SourceState):
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
input_audio_path = data.get("file_path")
audio_files = []

View file

@ -1,14 +1,15 @@
import os
from langchain_core.runnables import (
RunnableConfig,
)
from langgraph.graph import END, START, StateGraph
from typing_extensions import TypedDict
from open_notebook.config import load_default_models
from open_notebook.domain.notebook import Note, Notebook, Source
from open_notebook.graphs.utils import run_pattern
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class DocQueryState(TypedDict):
doc_id: str
@ -20,7 +21,7 @@ class DocQueryState(TypedDict):
def call_model(state: dict, config: RunnableConfig) -> dict:
model_id = config.get("configurable", {}).get(
"model_id", os.environ.get("RETRIEVAL_MODEL")
"model_id", DEFAULT_MODELS.default_transformation_model
)
return {"answer": run_pattern("doc_query", model_id, state)}

View file

@ -7,9 +7,11 @@ from langchain_core.runnables import (
from langgraph.graph import END, START, StateGraph
from typing_extensions import Annotated, TypedDict
from open_notebook.config import DEFAULT_MODELS
from open_notebook.config import load_default_models
from open_notebook.graphs.utils import run_pattern
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class PatternChainState(TypedDict):
content_stack: Annotated[Sequence[str], operator.add]

View file

@ -4,9 +4,11 @@ from langchain_core.runnables import (
from langgraph.graph import END, START, StateGraph
from typing_extensions import TypedDict
from open_notebook.config import DEFAULT_MODELS
from open_notebook.config import load_default_models
from open_notebook.graphs.utils import run_pattern
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class PatternState(TypedDict):
input_text: str

View file

@ -7,10 +7,12 @@ from langchain_core.runnables import (
from langgraph.graph import END, START, StateGraph
from typing_extensions import TypedDict
from open_notebook.config import DEFAULT_MODELS
from open_notebook.config import load_default_models
from open_notebook.graphs.utils import run_pattern
from open_notebook.utils import split_text
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class TocState(TypedDict):
chunks: List[str]

View file

@ -9,10 +9,12 @@ from langgraph.graph import END, START, StateGraph
from pydantic import BaseModel
from typing_extensions import TypedDict
from open_notebook.config import DEFAULT_MODELS
from open_notebook.config import load_default_models
from open_notebook.graphs.utils import run_pattern
from open_notebook.utils import split_text
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
class SummaryResponse(BaseModel):
"""This is schema of your response. Please provide a JSON object with the enclosed keys"""

View file

@ -1,7 +1,7 @@
from langchain.output_parsers import OutputFixingParser
from loguru import logger
from open_notebook.config import DEFAULT_MODELS
from open_notebook.config import load_default_models
from open_notebook.models import get_model
from open_notebook.prompter import Prompter
from open_notebook.utils import token_count
@ -18,7 +18,7 @@ def run_pattern(
system_prompt = Prompter(prompt_template=pattern_name, parser=parser).render(
data=state
)
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
tokens = token_count(str(system_prompt) + str(messages))
model_id = (

View file

@ -1,6 +1,7 @@
import streamlit as st
from humanize import naturaltime
from open_notebook.config import load_default_models
from open_notebook.domain.notebook import Notebook
from stream_app.chat import chat_sidebar
from stream_app.note import add_note, note_card
@ -11,7 +12,6 @@ st.set_page_config(
layout="wide", page_title="📒 Open Notebook", initial_sidebar_state="expanded"
)
version_sidebar()
@ -71,6 +71,9 @@ def notebook_page(current_notebook_id):
sources = current_notebook.sources
notes = current_notebook.notes
# Load the default models dynamically
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
notebook_header(current_notebook)
work_tab, chat_tab = st.columns([4, 2])
@ -116,7 +119,6 @@ if st.session_state["current_notebook"]:
st.title("📒 My Notebooks")
st.caption("Here are all your notebooks")
notebooks = Notebook.get_all(order_by="updated desc")
for notebook in notebooks:

1150
poetry.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
[tool.poetry]
name = "open-notebook"
version = "0.0.7"
version = "0.0.8"
description = "An open source implementation of a research assistant, inspired by Google Notebook LM"
authors = ["Luis Novo <lfnovo@gmail.com>"]
license = "MIT"

View file

@ -7,7 +7,7 @@ import yaml
from humanize import naturaltime
from loguru import logger
from open_notebook.config import UPLOADS_FOLDER
from open_notebook.config import UPLOADS_FOLDER, load_default_models
from open_notebook.domain.notebook import Asset, Source
from open_notebook.exceptions import UnsupportedTypeException
from open_notebook.graphs.content_processing import graph
@ -16,6 +16,8 @@ from open_notebook.utils import surreal_clean
from .consts import context_icons
DEFAULT_MODELS, EMBEDDING_MODEL, SPEECH_TO_TEXT_MODEL = load_default_models()
def run_patterns(input_text, patterns):
output = transform_graph.invoke(dict(content_stack=[input_text], patterns=patterns))
@ -162,7 +164,7 @@ def add_source(session_id):
st.stop()
except Exception as e:
st.error(e)
st.exception(e)
return
st.rerun()

View file

@ -31,5 +31,5 @@ source_insights:
# description: "Generates a list of insightful questions to provoke reflection"
# patterns:
# - patterns/default/reflection_questions
# - patterns/default/translate
# - patterns/user/translate