mirror of
https://github.com/hwchase17/langchain
synced 2024-11-06 03:20:49 +00:00
ed58eeb9c5
Moved the following modules to new package langchain-community in a backwards compatible fashion: ``` mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community ``` Moved the following to core ``` mv langchain/langchain/utils/json_schema.py core/langchain_core/utils mv langchain/langchain/utils/html.py core/langchain_core/utils mv langchain/langchain/utils/strings.py core/langchain_core/utils cat langchain/langchain/utils/env.py >> core/langchain_core/utils/env.py rm langchain/langchain/utils/env.py ``` See .scripts/community_split/script_integrations.sh for all changes
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""Quick and dirty representation for OpenAPI specs."""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import List, Tuple
|
|
|
|
from langchain_core.utils.json_schema import dereference_refs
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ReducedOpenAPISpec:
|
|
"""A reduced OpenAPI spec.
|
|
|
|
This is a quick and dirty representation for OpenAPI specs.
|
|
|
|
Attributes:
|
|
servers: The servers in the spec.
|
|
description: The description of the spec.
|
|
endpoints: The endpoints in the spec.
|
|
"""
|
|
|
|
servers: List[dict]
|
|
description: str
|
|
endpoints: List[Tuple[str, str, dict]]
|
|
|
|
|
|
def reduce_openapi_spec(spec: dict, dereference: bool = True) -> ReducedOpenAPISpec:
|
|
"""Simplify/distill/minify a spec somehow.
|
|
|
|
I want a smaller target for retrieval and (more importantly)
|
|
I want smaller results from retrieval.
|
|
I was hoping https://openapi.tools/ would have some useful bits
|
|
to this end, but doesn't seem so.
|
|
"""
|
|
# 1. Consider only get, post, patch, put, delete endpoints.
|
|
endpoints = [
|
|
(f"{operation_name.upper()} {route}", docs.get("description"), docs)
|
|
for route, operation in spec["paths"].items()
|
|
for operation_name, docs in operation.items()
|
|
if operation_name in ["get", "post", "patch", "put", "delete"]
|
|
]
|
|
|
|
# 2. Replace any refs so that complete docs are retrieved.
|
|
# Note: probably want to do this post-retrieval, it blows up the size of the spec.
|
|
if dereference:
|
|
endpoints = [
|
|
(name, description, dereference_refs(docs, full_schema=spec))
|
|
for name, description, docs in endpoints
|
|
]
|
|
|
|
# 3. Strip docs down to required request args + happy path response.
|
|
def reduce_endpoint_docs(docs: dict) -> dict:
|
|
out = {}
|
|
if docs.get("description"):
|
|
out["description"] = docs.get("description")
|
|
if docs.get("parameters"):
|
|
out["parameters"] = [
|
|
parameter
|
|
for parameter in docs.get("parameters", [])
|
|
if parameter.get("required")
|
|
]
|
|
if "200" in docs["responses"]:
|
|
out["responses"] = docs["responses"]["200"]
|
|
if docs.get("requestBody"):
|
|
out["requestBody"] = docs.get("requestBody")
|
|
return out
|
|
|
|
endpoints = [
|
|
(name, description, reduce_endpoint_docs(docs))
|
|
for name, description, docs in endpoints
|
|
]
|
|
return ReducedOpenAPISpec(
|
|
servers=spec["servers"],
|
|
description=spec["info"].get("description", ""),
|
|
endpoints=endpoints,
|
|
)
|