From a8c4b4380b84d2a6241dac29b0e038a1c9dfe1fb Mon Sep 17 00:00:00 2001 From: Yue Sun Date: Tue, 5 Aug 2025 09:53:21 +1000 Subject: [PATCH 1/5] adaption for NVIDIA API: stream=True --- openevolve/llm/openai.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/openevolve/llm/openai.py b/openevolve/llm/openai.py index 7946b4d81..762b3b154 100644 --- a/openevolve/llm/openai.py +++ b/openevolve/llm/openai.py @@ -38,6 +38,7 @@ def __init__( self.client = openai.OpenAI( api_key=self.api_key, base_url=self.api_base, + timeout=int(self.timeout) ) # Only log unique models to reduce duplication @@ -72,6 +73,16 @@ async def generate_with_context( "messages": formatted_messages, "max_completion_tokens": kwargs.get("max_tokens", self.max_tokens), } + elif self.api_base == "https://integrate.api.nvidia.com/v1": + # add the branch for NVbuild + params = { + "model": self.model, + "messages": formatted_messages, + "temperature": kwargs.get("temperature", self.temperature), + "top_p": kwargs.get("top_p", self.top_p), + "max_tokens": kwargs.get("max_tokens", self.max_tokens), + "stream": True + } else: params = { "model": self.model, @@ -130,4 +141,14 @@ async def _call_api(self, params: Dict[str, Any]) -> str: logger = logging.getLogger(__name__) logger.debug(f"API parameters: {params}") logger.debug(f"API response: {response.choices[0].message.content}") - return response.choices[0].message.content + + if self.api_base == "https://integrate.api.nvidia.com/v1": + #print(f"{params['model']}") + output="" + for chunk in response: + if chunk.choices[0].delta.content is not None: + output += chunk.choices[0].delta.content + else: + output=response.choices[0].message.content + + return output From 8cb953e885c42005ef5bb2676f8d51daf15c7409 Mon Sep 17 00:00:00 2001 From: Yue Sun Date: Tue, 5 Aug 2025 09:54:58 +1000 Subject: [PATCH 2/5] allow file extention to be the same as the initial program --- openevolve/controller.py | 1 + openevolve/evaluator.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/openevolve/controller.py b/openevolve/controller.py index 00fd311c6..690c6cd88 100644 --- a/openevolve/controller.py +++ b/openevolve/controller.py @@ -154,6 +154,7 @@ def __init__( self.evaluator = Evaluator( self.config.evaluator, evaluation_file, + Path(self.initial_program_path).suffix, self.llm_evaluator_ensemble, self.evaluator_prompt_sampler, database=self.database, diff --git a/openevolve/evaluator.py b/openevolve/evaluator.py index 80bcac333..a0bde195c 100644 --- a/openevolve/evaluator.py +++ b/openevolve/evaluator.py @@ -41,12 +41,14 @@ def __init__( self, config: EvaluatorConfig, evaluation_file: str, + suffix: str, llm_ensemble: Optional[LLMEnsemble] = None, prompt_sampler: Optional[PromptSampler] = None, database: Optional[ProgramDatabase] = None, ): self.config = config self.evaluation_file = evaluation_file + self.program_suffix = suffix self.llm_ensemble = llm_ensemble self.prompt_sampler = prompt_sampler self.database = database @@ -152,7 +154,7 @@ async def evaluate_program( last_exception = None for attempt in range(self.config.max_retries + 1): # Create a temporary file for the program - with tempfile.NamedTemporaryFile(suffix=".py", delete=False) as temp_file: + with tempfile.NamedTemporaryFile(suffix=self.program_suffix, delete=False) as temp_file: temp_file.write(program_code.encode("utf-8")) temp_file_path = temp_file.name From 03d7d2a9d22646a3789744a48287bdba2627f54a Mon Sep 17 00:00:00 2001 From: Yue Sun Date: Tue, 5 Aug 2025 10:03:09 +1000 Subject: [PATCH 3/5] reset OpenAILLM --- openevolve/llm/openai.py | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/openevolve/llm/openai.py b/openevolve/llm/openai.py index 762b3b154..7946b4d81 100644 --- a/openevolve/llm/openai.py +++ b/openevolve/llm/openai.py @@ -38,7 +38,6 @@ def __init__( self.client = openai.OpenAI( api_key=self.api_key, base_url=self.api_base, - timeout=int(self.timeout) ) # Only log unique models to reduce duplication @@ -73,16 +72,6 @@ async def generate_with_context( "messages": formatted_messages, "max_completion_tokens": kwargs.get("max_tokens", self.max_tokens), } - elif self.api_base == "https://integrate.api.nvidia.com/v1": - # add the branch for NVbuild - params = { - "model": self.model, - "messages": formatted_messages, - "temperature": kwargs.get("temperature", self.temperature), - "top_p": kwargs.get("top_p", self.top_p), - "max_tokens": kwargs.get("max_tokens", self.max_tokens), - "stream": True - } else: params = { "model": self.model, @@ -141,14 +130,4 @@ async def _call_api(self, params: Dict[str, Any]) -> str: logger = logging.getLogger(__name__) logger.debug(f"API parameters: {params}") logger.debug(f"API response: {response.choices[0].message.content}") - - if self.api_base == "https://integrate.api.nvidia.com/v1": - #print(f"{params['model']}") - output="" - for chunk in response: - if chunk.choices[0].delta.content is not None: - output += chunk.choices[0].delta.content - else: - output=response.choices[0].message.content - - return output + return response.choices[0].message.content From 3c8324c959b840ffab28eedf9c9db8be6e61b262 Mon Sep 17 00:00:00 2001 From: Yue Sun Date: Tue, 12 Aug 2025 16:42:45 +1000 Subject: [PATCH 4/5] suffix default to .py --- openevolve/controller.py | 2 +- openevolve/evaluator.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openevolve/controller.py b/openevolve/controller.py index 690c6cd88..784a8408c 100644 --- a/openevolve/controller.py +++ b/openevolve/controller.py @@ -154,10 +154,10 @@ def __init__( self.evaluator = Evaluator( self.config.evaluator, evaluation_file, - Path(self.initial_program_path).suffix, self.llm_evaluator_ensemble, self.evaluator_prompt_sampler, database=self.database, + Path(self.initial_program_path).suffix, ) self.evaluation_file = evaluation_file diff --git a/openevolve/evaluator.py b/openevolve/evaluator.py index a0bde195c..bba5bdfad 100644 --- a/openevolve/evaluator.py +++ b/openevolve/evaluator.py @@ -41,10 +41,10 @@ def __init__( self, config: EvaluatorConfig, evaluation_file: str, - suffix: str, llm_ensemble: Optional[LLMEnsemble] = None, prompt_sampler: Optional[PromptSampler] = None, database: Optional[ProgramDatabase] = None, + suffix: Optional[str]=".py", ): self.config = config self.evaluation_file = evaluation_file From 571343fdcfed04df4310c6487fefa06369bebb67 Mon Sep 17 00:00:00 2001 From: Yue Sun Date: Wed, 13 Aug 2025 08:57:22 +1000 Subject: [PATCH 5/5] suffix default to .py --- openevolve/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openevolve/controller.py b/openevolve/controller.py index 784a8408c..dc03d22d0 100644 --- a/openevolve/controller.py +++ b/openevolve/controller.py @@ -157,7 +157,7 @@ def __init__( self.llm_evaluator_ensemble, self.evaluator_prompt_sampler, database=self.database, - Path(self.initial_program_path).suffix, + suffix=Path(self.initial_program_path).suffix, ) self.evaluation_file = evaluation_file