1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
import logging
import os
from enum import Enum
from typing import Optional
from fastapi import FastAPI
from r2r import R2RBuilder, R2RConfig
from r2r.main.execution import R2RExecutionWrapper
logger = logging.getLogger(__name__)
current_file_path = os.path.dirname(__file__)
configs_path = os.path.join(current_file_path, "..", "..", "..")
class PipelineType(Enum):
QNA = "qna"
WEB = "web"
HYDE = "hyde"
def r2r_app(
config_name: Optional[str] = "default",
config_path: Optional[str] = None,
client_mode: bool = False,
base_url: Optional[str] = None,
pipeline_type: PipelineType = PipelineType.QNA,
) -> FastAPI:
if pipeline_type != PipelineType.QNA:
raise ValueError("Only QNA pipeline is supported in quickstart.")
if config_path and config_name:
raise ValueError("Cannot specify both config and config_name")
if config_path:
config = R2RConfig.from_json(config_path)
else:
config_name = os.getenv("CONFIG_NAME") or config_name
if config_name not in R2RBuilder.CONFIG_OPTIONS:
raise ValueError(f"Invalid config name: {config_name}")
config = R2RConfig.from_json(R2RBuilder.CONFIG_OPTIONS[config_name])
if (
config.embedding.provider == "openai"
and "OPENAI_API_KEY" not in os.environ
):
raise ValueError(
"Must set OPENAI_API_KEY in order to initialize OpenAIEmbeddingProvider."
)
wrapper = R2RExecutionWrapper(
config_name=config_name,
config_path=config_path,
client_mode=client_mode,
base_url=base_url,
)
return wrapper.get_app()
logging.basicConfig(level=logging.INFO)
config_name = os.getenv("CONFIG_NAME", None)
config_path = os.getenv("CONFIG_PATH", None)
if not config_path and not config_name:
config_name = "default"
client_mode = os.getenv("CLIENT_MODE", "false").lower() == "true"
base_url = os.getenv("BASE_URL")
host = os.getenv("HOST", "0.0.0.0")
port = int(os.getenv("PORT", "8000"))
pipeline_type = os.getenv("PIPELINE_TYPE", "qna")
logger.info(f"Environment CONFIG_NAME: {config_name}")
logger.info(f"Environment CONFIG_PATH: {config_path}")
logger.info(f"Environment CLIENT_MODE: {client_mode}")
logger.info(f"Environment BASE_URL: {base_url}")
logger.info(f"Environment PIPELINE_TYPE: {pipeline_type}")
app = r2r_app(
config_name=config_name,
config_path=config_path,
client_mode=client_mode,
base_url=base_url,
pipeline_type=PipelineType(pipeline_type),
)
|