mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 15:19:10 +02:00
52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
"""
|
|
Example of using sampling to request an LLM completion via Marvin
|
|
"""
|
|
|
|
import asyncio
|
|
|
|
import marvin
|
|
from mcp.types import TextContent
|
|
|
|
from fastmcp import Client, Context, FastMCP
|
|
from fastmcp.client.sampling import RequestContext, SamplingMessage, SamplingParams
|
|
|
|
# -- Create a server that sends a sampling request to the LLM
|
|
|
|
mcp = FastMCP("Sampling Example")
|
|
|
|
|
|
@mcp.tool()
|
|
async def example_tool(prompt: str, context: Context) -> str:
|
|
"""Sample a completion from the LLM."""
|
|
response = await context.sample(
|
|
"What is your favorite programming language?",
|
|
system_prompt="You love languages named after snakes.",
|
|
)
|
|
assert isinstance(response, TextContent)
|
|
return response.text
|
|
|
|
|
|
# -- Create a client that can handle the sampling request
|
|
|
|
|
|
async def sampling_fn(
|
|
messages: list[SamplingMessage],
|
|
params: SamplingParams,
|
|
ctx: RequestContext,
|
|
) -> str:
|
|
return await marvin.say_async(
|
|
message=[m.content.text for m in messages],
|
|
instructions=params.systemPrompt,
|
|
)
|
|
|
|
|
|
async def run():
|
|
async with Client(mcp, sampling_handler=sampling_fn) as client:
|
|
result = await client.call_tool(
|
|
"example_tool", {"prompt": "What is the best programming language?"}
|
|
)
|
|
print(result)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(run())
|