Skip to content

Commit 1e8194f

Browse files
jsonbaileyclaude
andcommitted
fix: runners prepend config messages; managed layer passes plain str to run()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent efaa5b7 commit 1e8194f

5 files changed

Lines changed: 17 additions & 9 deletions

File tree

packages/ai-providers/server-ai-langchain/src/ldai_langchain/langchain_model_runner.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ class LangChainModelRunner(Runner):
2424
:meth:`run`.
2525
"""
2626

27-
def __init__(self, llm: BaseChatModel):
27+
def __init__(self, llm: BaseChatModel, config_messages: Optional[List[LDMessage]] = None):
2828
self._llm = llm
29+
self._config_messages: List[LDMessage] = list(config_messages or [])
2930

3031
def get_llm(self) -> BaseChatModel:
3132
"""
@@ -43,14 +44,17 @@ async def run(
4344
"""
4445
Run the LangChain model with the given input.
4546
47+
Prepends any config messages (system prompt, instructions, etc.) stored
48+
at construction time before the user message.
49+
4650
:param input: A string prompt
4751
:param output_type: Optional JSON schema dict requesting structured output.
4852
When provided, ``parsed`` on the returned :class:`RunnerResult` is
4953
populated with the parsed JSON document.
5054
:return: :class:`RunnerResult` containing ``content``, ``metrics``,
5155
``raw`` and (when ``output_type`` is set) ``parsed``.
5256
"""
53-
messages = [LDMessage(role='user', content=input)]
57+
messages = self._config_messages + [LDMessage(role='user', content=input)]
5458

5559
if output_type is not None:
5660
return await self._run_structured(messages, output_type)

packages/ai-providers/server-ai-langchain/src/ldai_langchain/langchain_runner_factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ def create_model(self, config: AIConfigKind) -> LangChainModelRunner:
6969
:return: LangChainModelRunner ready to invoke the model
7070
"""
7171
llm = create_langchain_model(config)
72-
return LangChainModelRunner(llm)
72+
config_messages = list(getattr(config, 'messages', None) or [])
73+
return LangChainModelRunner(llm, config_messages)

packages/ai-providers/server-ai-openai/src/ldai_openai/openai_model_runner.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ def __init__(
2828
client: AsyncOpenAI,
2929
model_name: str,
3030
parameters: Dict[str, Any],
31+
config_messages: Optional[List[LDMessage]] = None,
3132
):
3233
self._client = client
3334
self._model_name = model_name
3435
self._parameters = parameters
36+
self._config_messages: List[LDMessage] = list(config_messages or [])
3537

3638
async def run(
3739
self,
@@ -41,14 +43,17 @@ async def run(
4143
"""
4244
Run the OpenAI model with the given input.
4345
46+
Prepends any config messages (system prompt, instructions, etc.) stored
47+
at construction time before the user message.
48+
4449
:param input: A string prompt
4550
:param output_type: Optional JSON schema dict requesting structured output.
4651
When provided, ``parsed`` on the returned :class:`RunnerResult` is
4752
populated with the parsed JSON document.
4853
:return: :class:`RunnerResult` containing ``content``, ``metrics``,
4954
``raw`` and (when ``output_type`` is set) ``parsed``.
5055
"""
51-
messages = [LDMessage(role='user', content=input)]
56+
messages = self._config_messages + [LDMessage(role='user', content=input)]
5257

5358
if output_type is not None:
5459
return await self._run_structured(messages, output_type)

packages/ai-providers/server-ai-openai/src/ldai_openai/openai_runner_factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ def create_model(self, config: AIConfigKind) -> OpenAIModelRunner:
100100
tool_defs = parameters.pop('tools', None) or []
101101
if tool_defs:
102102
parameters['tools'] = normalize_tool_types(tool_defs)
103-
return OpenAIModelRunner(self._client, model_name, parameters)
103+
config_messages = list(getattr(config, 'messages', None) or [])
104+
return OpenAIModelRunner(self._client, model_name, parameters, config_messages)
104105

105106
def get_client(self) -> AsyncOpenAI:
106107
"""

packages/sdk/server-ai/src/ldai/managed_model.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,9 @@ async def run(self, prompt: str) -> ManagedResult:
4343
user_message = LDMessage(role='user', content=prompt)
4444
self._messages.append(user_message)
4545

46-
config_messages = self._ai_config.messages or []
47-
all_messages = config_messages + self._messages
48-
4946
result: RunnerResult = await tracker.track_metrics_of_async(
5047
lambda r: r.metrics,
51-
lambda: self._model_runner.run(all_messages),
48+
lambda: self._model_runner.run(prompt),
5249
)
5350

5451
assistant_message = LDMessage(role='assistant', content=result.content)

0 commit comments

Comments
 (0)