22from pathlib import Path
33import yaml
44
5- from jinja2 import Template
65from dotenv import load_dotenv
6+ from jinja2 import Template
7+ from openai import OpenAI
78
89
910main_path = Path (__file__ ).parents [1 ].absolute ()
1011load_dotenv (main_path / ".env" )
1112
12- # Load envars
13+ # Load optional envars
14+ IS_DEV = os .environ .get ("IS_DEV" , "false" ).lower () == "true"
15+ LLM_ENDPOINT = os .environ .get ("LLM_ENDPOINT" , "https://vllm.cloud.ai4eosc.eu" )
16+ LLM_EMBEDDINGS = os .environ .get ("LLM_EMBEDDINGS" , "AI4EOSC/Qwen/Qwen3-Embedding-4B" )
17+ LLM_CHAT = os .environ .get (
18+ "LLM_CHAT" , "AI4EOSC/mistralai/Mistral-Small-3.1-24B-Instruct-2503"
19+ )
20+
21+ # Load secrets
1322OPENAI_API_KEY = os .environ .get ("OPENAI_API_KEY" )
1423GRADIO_PASSWORD = os .environ .get ("GRADIO_PASSWORD" )
15- IS_DEV = os .environ .get ("IS_DEV" , "false" ).lower () == "true"
1624
1725if not all ([OPENAI_API_KEY , GRADIO_PASSWORD ]):
1826 raise Exception ("Please provide an OPENAI_API_KEY and GRADIO_PASSWORD." )
@@ -31,12 +39,21 @@ def load_jinja(path):
3139pre_prompt = load_jinja (templates_dir / "prompt-preprocessing.jinja" )
3240post_prompt = load_jinja (templates_dir / "prompt-postprocessing.jinja" )
3341
34- # DOME questionnaire
35-
3642
43+ # DOME questionnaire
3744def load_yaml (path ):
3845 with open (path ) as stream :
3946 return yaml .safe_load (stream )
4047
4148
4249dome = load_yaml (templates_dir / "dome-questionnaire.yml" )
50+
51+ # Check that the models exist, to catch typos
52+ openai_client = OpenAI (api_key = OPENAI_API_KEY , base_url = LLM_ENDPOINT )
53+ models = [model .id for model in openai_client .models .list ().data ]
54+ if LLM_EMBEDDINGS not in models :
55+ raise Exception (
56+ f"Invalid embeddings model name:\n '{ LLM_EMBEDDINGS } ' not in { models } "
57+ )
58+ if LLM_CHAT not in models :
59+ raise Exception (f"Invalid chat model name:\n '{ LLM_CHAT } ' not in { models } " )
0 commit comments