temporary fix to config cache
This commit is contained in:
parent
cc9b0ac68c
commit
b89250d3ca
18 changed files with 664 additions and 587 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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__}")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
||||
|
|
|
|||
|
|
@ -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)}
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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"""
|
||||
|
|
|
|||
|
|
@ -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 = (
|
||||
|
|
|
|||
|
|
@ -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
1150
poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue