Spaces:
Sleeping
Sleeping
| import json | |
| from vcelldb.params_model import QueryParams | |
| from utils.llm_helper import get_llm_client | |
| SYSTEM_PROMPT = f""" | |
| You are an assistant for a VCell BioModel explorer that responds only in JSON. | |
| Your job is to extract structured API parameters from user questions about VCell models. | |
| Only return the following keys if relevant: | |
| - bmName | |
| - bmId | |
| - category (one of: all, public, shared, tutorials, educational) | |
| - owner | |
| - savedLow (format: YYYY-MM-DD) | |
| - savedHigh (format: YYYY-MM-DD) | |
| - startRow (int) | |
| - maxRows (int) | |
| - orderBy (one of: date_desc, date_asc, name_desc, name_asc) | |
| Here is the JSON Schema for the parameters: | |
| The JSON object must follow this schema:\n{json.dumps(QueryParams.model_json_schema(), indent=2)} | |
| Respond only with a JSON object. Do not explain anything else. | |
| """ | |
| def get_path_params(user_prompt: str): | |
| """ | |
| This function extracts the path parameters from the user prompt. | |
| Args: | |
| user_prompt (str): A Natural Language prompt from the user that will be used to extract path parameters. | |
| Returns: | |
| dict: A dictionary containing the extracted path parameters. | |
| """ | |
| client = get_llm_client() | |
| try: | |
| response = client.chat.completions.create( | |
| model="llama-3.3-70b-versatile", | |
| messages=[ | |
| {"role": "system", "content": SYSTEM_PROMPT}, | |
| {"role": "user", "content": user_prompt}, | |
| ], | |
| response_format={"type": "json_object"}, | |
| ) | |
| content = QueryParams.model_validate_json(response.choices[0].message.content) | |
| params = content.model_dump(exclude_none=True) | |
| return params | |
| except Exception as e: | |
| return {"error": f"Failed to extract parameters: {str(e)}"} | |