""" Copyright 2024, Zep Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ from typing import Any, Protocol, TypedDict from .dedupe_edges import Prompt as DedupeEdgesPrompt from .dedupe_edges import Versions as DedupeEdgesVersions from .dedupe_edges import versions as dedupe_edges_versions from .dedupe_nodes import Prompt as DedupeNodesPrompt from .dedupe_nodes import Versions as DedupeNodesVersions from .dedupe_nodes import versions as dedupe_nodes_versions from .eval import Prompt as EvalPrompt from .eval import Versions as EvalVersions from .eval import versions as eval_versions from .extract_edges import Prompt as ExtractEdgesPrompt from .extract_edges import Versions as ExtractEdgesVersions from .extract_edges import versions as extract_edges_versions from .extract_nodes import Prompt as ExtractNodesPrompt from .extract_nodes import Versions as ExtractNodesVersions from .extract_nodes import versions as extract_nodes_versions from .extract_nodes_and_edges import Prompt as ExtractNodesAndEdgesPrompt from .extract_nodes_and_edges import Versions as ExtractNodesAndEdgesVersions from .extract_nodes_and_edges import versions as extract_nodes_and_edges_versions from .models import Message, PromptFunction from .prompt_helpers import DO_NOT_ESCAPE_UNICODE from .summarize_nodes import Prompt as SummarizeNodesPrompt from .summarize_nodes import Versions as SummarizeNodesVersions from .summarize_nodes import versions as summarize_nodes_versions from .summarize_sagas import Prompt as SummarizeSagasPrompt from .summarize_sagas import Versions as SummarizeSagasVersions from .summarize_sagas import versions as summarize_sagas_versions class PromptLibrary(Protocol): extract_nodes: ExtractNodesPrompt dedupe_nodes: DedupeNodesPrompt extract_edges: ExtractEdgesPrompt extract_nodes_and_edges: ExtractNodesAndEdgesPrompt dedupe_edges: DedupeEdgesPrompt summarize_nodes: SummarizeNodesPrompt summarize_sagas: SummarizeSagasPrompt eval: EvalPrompt class PromptLibraryImpl(TypedDict): extract_nodes: ExtractNodesVersions dedupe_nodes: DedupeNodesVersions extract_edges: ExtractEdgesVersions extract_nodes_and_edges: ExtractNodesAndEdgesVersions dedupe_edges: DedupeEdgesVersions summarize_nodes: SummarizeNodesVersions summarize_sagas: SummarizeSagasVersions eval: EvalVersions class VersionWrapper: def __init__(self, func: PromptFunction): self.func = func def __call__(self, context: dict[str, Any]) -> list[Message]: messages = self.func(context) for message in messages: message.content += DO_NOT_ESCAPE_UNICODE if message.role == 'system' else '' return messages class PromptTypeWrapper: def __init__(self, versions: dict[str, PromptFunction]): for version, func in versions.items(): setattr(self, version, VersionWrapper(func)) class PromptLibraryWrapper: def __init__(self, library: PromptLibraryImpl): for prompt_type, versions in library.items(): setattr(self, prompt_type, PromptTypeWrapper(versions)) # type: ignore[arg-type] PROMPT_LIBRARY_IMPL: PromptLibraryImpl = { 'extract_nodes': extract_nodes_versions, 'dedupe_nodes': dedupe_nodes_versions, 'extract_edges': extract_edges_versions, 'extract_nodes_and_edges': extract_nodes_and_edges_versions, 'dedupe_edges': dedupe_edges_versions, 'summarize_nodes': summarize_nodes_versions, 'summarize_sagas': summarize_sagas_versions, 'eval': eval_versions, } prompt_library: PromptLibrary = PromptLibraryWrapper(PROMPT_LIBRARY_IMPL) # type: ignore[assignment]