-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathmain.py
More file actions
130 lines (99 loc) · 3.56 KB
/
main.py
File metadata and controls
130 lines (99 loc) · 3.56 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
try:
from dotenv import load_dotenv
load_dotenv()
from app import CLI, default_ui
from app.utils.logger import logger
except Exception as e:
print("Unexpected error happened...")
import sys
sys.exit(1)
from warnings import filterwarnings
import os
import sys
import json
import logging
logging.basicConfig(level=logging.CRITICAL)
filterwarnings("ignore", category=Warning, module="torch")
filterwarnings("ignore", category=Warning, module="huggingface_hub")
filterwarnings("ignore", category=Warning, module="onnxruntime")
api_keys = {
"cerebras": os.getenv("CEREBRAS_API_KEY"),
"openai": os.getenv("OPENAI_API_KEY"),
"anthropic": os.getenv("ANTHROPIC_API_KEY"),
"google": os.getenv("GOOGLE_GEN_AI_API_KEY"),
"openrouter": os.getenv("OPENROUTER_API_KEY"),
"github": os.getenv("GITHUB_AI_API_KEY"),
"groq": os.getenv("GROQ_API_KEY"),
}
########### load the configuration ###########
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(BASE_DIR, "config.json")
try:
with open(config_path) as f:
config = json.load(f)
except FileNotFoundError as e:
logger.error("Configuration file 'config.json' not found", exc_info=e)
default_ui.error("Configuration file 'config.json' not found.")
sys.exit(1)
except json.JSONDecodeError as e:
logger.error("Configuration file 'config.json' is not valid JSON", exc_info=e)
default_ui.error("Configuration file 'config.json' is not a valid JSON.")
sys.exit(1)
except Exception as e:
logger.exception("Unexpected error loading configuration")
default_ui.error("An unexpected error occurred")
sys.exit(1)
AGENT_TYPES = ["general", "code_gen", "brainstormer", "web_searcher"]
########### prepare the configuration ###########
provider = config.get("provider")
model = config.get("model")
api_key = api_keys.get(provider)
raw_provider_per_model = config.get("provider_per_model") or {}
provider_per_model = {
k: (raw_provider_per_model.get(k) or provider) for k in AGENT_TYPES
}
raw_models = config.get("models") or {}
models = {k: (raw_models.get(k) or model) for k in AGENT_TYPES}
api_key_per_model = {
k: api_keys.get(provider_per_model.get(k), api_key) for k in AGENT_TYPES
}
temperatures = config.get("temperatures") or {}
system_prompts = config.get("system_prompts") or {}
embedding_provider = config.get("embedding_provider") or ""
embedding_model = config.get("embedding_model") or ""
scraping_method = config.get("scraping_method") or "simple"
client = None
try:
client = CLI(
provider=provider,
provider_per_model=provider_per_model,
models=models,
api_key=api_key,
api_key_per_model=api_key_per_model,
embedding_provider=embedding_provider,
embedding_model=embedding_model,
temperatures=temperatures,
system_prompts=system_prompts,
scraping_method=scraping_method,
stream=True,
)
except Exception as e:
logger.error(f"Failed to initialize the CLI client: {str(e)}", exc_info=e)
default_ui.error("Failed to initialize the CLI client. Please check the logs.")
sys.exit(1)
########### run the CLI ###########
def main():
try:
args = sys.argv[1:]
client.start_chat(*args)
except Exception as e:
logger.error(
f"An unexpected error occurred during the chat session: {str(e)}",
exc_info=e,
)
default_ui.error(
"An unexpected error occurred. Please check the logs for details."
)
sys.exit(1)
if __name__ == "__main__":
main()