Source code for autorag.data.qa.evolve.openai_query_evolve

import itertools
from typing import Dict, List

from llama_index.core.base.llms.types import ChatMessage, MessageRole
from llama_index.llms.openai.utils import to_openai_message_dicts
from openai import AsyncClient
from pydantic import BaseModel

from autorag.data.qa.evolve.prompt import QUERY_EVOLVE_PROMPT


[docs] class Response(BaseModel): evolved_query: str
[docs] async def query_evolve_openai_base( row: Dict, client: AsyncClient, messages: List[ChatMessage], model_name: str = "gpt-4o-2024-08-06", ): """ Evolve the original query to a new evolved query using OpenAI structured outputs. """ original_query = row["query"] context = list(itertools.chain.from_iterable(row["retrieval_gt_contents"])) context_str = "Text:\n" + "\n".join( [f"{i + 1}. {c}" for i, c in enumerate(context)] ) user_prompt = f"Question: {original_query}\nContext: {context_str}\nOutput: " messages.append(ChatMessage(role=MessageRole.USER, content=user_prompt)) completion = await client.beta.chat.completions.parse( model=model_name, messages=to_openai_message_dicts(messages), response_format=Response, ) row["query"] = completion.choices[0].message.parsed.evolved_query return row
[docs] async def conditional_evolve_ragas( row: Dict, client: AsyncClient, model_name: str = "gpt-4o-2024-08-06", lang: str = "en", ) -> Dict: return await query_evolve_openai_base( row, client, QUERY_EVOLVE_PROMPT["conditional_evolve_ragas"][lang], model_name )
[docs] async def reasoning_evolve_ragas( row: Dict, client: AsyncClient, model_name: str = "gpt-4o-2024-08-06", lang: str = "en", ) -> Dict: return await query_evolve_openai_base( row, client, QUERY_EVOLVE_PROMPT["reasoning_evolve_ragas"][lang], model_name )
[docs] async def compress_ragas( row: Dict, client: AsyncClient, model_name: str = "gpt-4o-2024-08-06", lang: str = "en", ) -> Dict: original_query = row["query"] messages = QUERY_EVOLVE_PROMPT["compress_ragas"][lang] user_prompt = f"Question: {original_query}\nOutput: " messages.append(ChatMessage(role=MessageRole.USER, content=user_prompt)) completion = await client.beta.chat.completions.parse( model=model_name, messages=to_openai_message_dicts(messages), response_format=Response, ) row["query"] = completion.choices[0].message.parsed.evolved_query return row