langroid 0.1.240__tar.gz → 0.1.243__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {langroid-0.1.240 → langroid-0.1.243}/PKG-INFO +3 -2
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/openai_gpt.py +44 -34
- {langroid-0.1.240 → langroid-0.1.243}/pyproject.toml +3 -2
- {langroid-0.1.240 → langroid-0.1.243}/LICENSE +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/README.md +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/batch.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/callbacks/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/callbacks/chainlit.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/chat_document.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/helpers.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/junk +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/openai_assistant.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/doc_chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_rag/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_tools.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/neo4j/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/neo4j/utils/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/neo4j/utils/system_message.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/relevance_extractor_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/retriever_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/system_message.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/tools.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/table_chat_agent.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/task.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tool_message.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/extract_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/generator_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/google_search_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/metaphor_search_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/recipient_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/run_python_code.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent/tools/segment_extract_tool.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/agent_config.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/cachedb/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/cachedb/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/cachedb/momento_cachedb.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/cachedb/redis_cachedb.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/clustering.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/models.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/embeddings.proto +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/remote_embeds.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/azure_openai.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/config.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/openai_assistants.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/utils.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/mytypes.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/agent_chats.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/code-parsing.md +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/code_parser.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/config.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/document_parser.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/image_text.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/para_sentence_split.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/parse_json.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/parser.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/repo_loader.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/search.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/spider.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/table_loader.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/url_loader.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/url_loader_cookies.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/urls.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/utils.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/parsing/web_search.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/dialog.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/prompts_config.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/templates.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/prompts/transforms.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/algorithms/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/algorithms/graph.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/configuration.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/constants.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/docker.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/globals.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/llms/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/llms/strings.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/logging.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/output/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/output/printing.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/output/status.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/pandas_utils.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/pydantic_utils.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/system.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/web/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/utils/web/login.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/__init__.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/base.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/chromadb.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/lancedb.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/meilisearch.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/momento.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/qdrant_cloud.py +0 -0
- {langroid-0.1.240 → langroid-0.1.243}/langroid/vector_store/qdrantdb.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: langroid
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.243
|
4
4
|
Summary: Harness LLMs with Multi-Agent Programming
|
5
5
|
License: MIT
|
6
6
|
Author: Prasad Chalasani
|
@@ -30,12 +30,13 @@ Requires-Dist: chainlit (>=1.0.400,<2.0.0) ; extra == "chainlit"
|
|
30
30
|
Requires-Dist: chromadb (>=0.4.21,<=0.4.23) ; extra == "chromadb"
|
31
31
|
Requires-Dist: colorlog (>=6.7.0,<7.0.0)
|
32
32
|
Requires-Dist: docstring-parser (>=0.15,<0.16)
|
33
|
-
Requires-Dist: duckduckgo-search (>=
|
33
|
+
Requires-Dist: duckduckgo-search (>=6.0.0,<7.0.0)
|
34
34
|
Requires-Dist: faker (>=18.9.0,<19.0.0)
|
35
35
|
Requires-Dist: fakeredis (>=2.12.1,<3.0.0)
|
36
36
|
Requires-Dist: fire (>=0.5.0,<0.6.0)
|
37
37
|
Requires-Dist: flake8 (>=6.0.0,<7.0.0)
|
38
38
|
Requires-Dist: google-api-python-client (>=2.95.0,<3.0.0)
|
39
|
+
Requires-Dist: google-generativeai (>=0.5.2,<0.6.0)
|
39
40
|
Requires-Dist: groq (>=0.5.0,<0.6.0)
|
40
41
|
Requires-Dist: grpcio (>=1.62.1,<2.0.0)
|
41
42
|
Requires-Dist: halo (>=0.0.31,<0.0.32)
|
@@ -71,6 +71,7 @@ class OpenAIChatModel(str, Enum):
|
|
71
71
|
GPT4 = "gpt-4"
|
72
72
|
GPT4_32K = "gpt-4-32k"
|
73
73
|
GPT4_TURBO = "gpt-4-turbo"
|
74
|
+
GPT4o = "gpt-4o"
|
74
75
|
|
75
76
|
|
76
77
|
class OpenAICompletionModel(str, Enum):
|
@@ -86,6 +87,7 @@ _context_length: Dict[str, int] = {
|
|
86
87
|
OpenAIChatModel.GPT4: 8192,
|
87
88
|
OpenAIChatModel.GPT4_32K: 32_768,
|
88
89
|
OpenAIChatModel.GPT4_TURBO: 128_000,
|
90
|
+
OpenAIChatModel.GPT4o: 128_000,
|
89
91
|
OpenAICompletionModel.TEXT_DA_VINCI_003: 4096,
|
90
92
|
}
|
91
93
|
|
@@ -95,10 +97,12 @@ _cost_per_1k_tokens: Dict[str, Tuple[float, float]] = {
|
|
95
97
|
OpenAIChatModel.GPT3_5_TURBO: (0.001, 0.002),
|
96
98
|
OpenAIChatModel.GPT4: (0.03, 0.06), # 8K context
|
97
99
|
OpenAIChatModel.GPT4_TURBO: (0.01, 0.03), # 128K context
|
100
|
+
OpenAIChatModel.GPT4o: (0.005, 0.015), # 128K context
|
98
101
|
}
|
99
102
|
|
100
103
|
|
101
104
|
openAIChatModelPreferenceList = [
|
105
|
+
OpenAIChatModel.GPT4o,
|
102
106
|
OpenAIChatModel.GPT4_TURBO,
|
103
107
|
OpenAIChatModel.GPT4,
|
104
108
|
OpenAIChatModel.GPT3_5_TURBO,
|
@@ -670,23 +674,26 @@ class OpenAIGPT(LanguageModel):
|
|
670
674
|
sys.stdout.write(Colors().GREEN)
|
671
675
|
sys.stdout.flush()
|
672
676
|
has_function = False
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
677
|
+
try:
|
678
|
+
for event in response:
|
679
|
+
(
|
680
|
+
is_break,
|
681
|
+
has_function,
|
682
|
+
function_name,
|
683
|
+
function_args,
|
684
|
+
completion,
|
685
|
+
) = self._process_stream_event(
|
686
|
+
event,
|
687
|
+
chat=chat,
|
688
|
+
has_function=has_function,
|
689
|
+
completion=completion,
|
690
|
+
function_args=function_args,
|
691
|
+
function_name=function_name,
|
692
|
+
)
|
693
|
+
if is_break:
|
694
|
+
break
|
695
|
+
except Exception:
|
696
|
+
pass
|
690
697
|
|
691
698
|
print("")
|
692
699
|
# TODO- get usage info in stream mode (?)
|
@@ -722,23 +729,26 @@ class OpenAIGPT(LanguageModel):
|
|
722
729
|
sys.stdout.write(Colors().GREEN)
|
723
730
|
sys.stdout.flush()
|
724
731
|
has_function = False
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
732
|
+
try:
|
733
|
+
async for event in response:
|
734
|
+
(
|
735
|
+
is_break,
|
736
|
+
has_function,
|
737
|
+
function_name,
|
738
|
+
function_args,
|
739
|
+
completion,
|
740
|
+
) = self._process_stream_event(
|
741
|
+
event,
|
742
|
+
chat=chat,
|
743
|
+
has_function=has_function,
|
744
|
+
completion=completion,
|
745
|
+
function_args=function_args,
|
746
|
+
function_name=function_name,
|
747
|
+
)
|
748
|
+
if is_break:
|
749
|
+
break
|
750
|
+
except Exception:
|
751
|
+
pass
|
742
752
|
|
743
753
|
print("")
|
744
754
|
# TODO- get usage info in stream mode (?)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "langroid"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.243"
|
4
4
|
description = "Harness LLMs with Multi-Agent Programming"
|
5
5
|
authors = ["Prasad Chalasani <pchalasani@gmail.com>"]
|
6
6
|
readme = "README.md"
|
@@ -90,7 +90,7 @@ grpcio = "^1.62.1"
|
|
90
90
|
metaphor-python = {version = "^0.1.23", optional = true}
|
91
91
|
chainlit = {version = "^1.0.400", optional = true}
|
92
92
|
python-socketio = {version="^5.11.0", optional=true}
|
93
|
-
duckduckgo-search = "^
|
93
|
+
duckduckgo-search = "^6.0.0"
|
94
94
|
huggingface-hub = {version="^0.21.2", optional=true}
|
95
95
|
pdf2image = "^1.17.0"
|
96
96
|
pytesseract = "^0.3.10"
|
@@ -100,6 +100,7 @@ groq = "^0.5.0"
|
|
100
100
|
nest-asyncio = "^1.6.0"
|
101
101
|
python-magic = "^0.4.27"
|
102
102
|
transformers = {version="^4.40.1", optional=true}
|
103
|
+
google-generativeai = "^0.5.2"
|
103
104
|
|
104
105
|
[tool.poetry.extras]
|
105
106
|
# install these using `poetry install -E [...]` where [...] is one of the extras below
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/lance_rag/query_planner_agent.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{langroid-0.1.240 → langroid-0.1.243}/langroid/agent/special/sql/utils/description_extractors.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{langroid-0.1.240 → langroid-0.1.243}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/hf_formatter.py
RENAMED
File without changes
|
{langroid-0.1.240 → langroid-0.1.243}/langroid/language_models/prompt_formatter/llama2_formatter.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|