참고소스 수정본
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
"""This examples shows how to create a custom component
|
||||
that can be added to a Pipeline with:
|
||||
|
||||
c = MyComponent(min_value=0, max_value=10)
|
||||
pipe = Pipeline()
|
||||
pipe.add_component(c, name="my_component")
|
||||
"""
|
||||
|
||||
import random
|
||||
|
||||
from neo4j_graphrag.experimental.pipeline import Component, DataModel
|
||||
from pydantic import BaseModel, validate_call
|
||||
|
||||
|
||||
class ComponentInputModel(BaseModel):
|
||||
"""A class to model the component inputs.
|
||||
This is not required, inputs can also be passed individually.
|
||||
|
||||
Note: can also inherit from DataModel.
|
||||
"""
|
||||
|
||||
text: str
|
||||
|
||||
|
||||
class ComponentResultModel(DataModel):
|
||||
"""A class to model the component outputs.
|
||||
Each component must have such a description of the output,
|
||||
so that the parameter mapping can be validated before the
|
||||
pipeline run starts.
|
||||
"""
|
||||
|
||||
value: int
|
||||
text: str
|
||||
|
||||
|
||||
class MyComponent(Component):
|
||||
"""Multiplies an input text by a random number
|
||||
between `min_value` and `max_value`
|
||||
"""
|
||||
|
||||
def __init__(self, min_value: int, max_value: int) -> None:
|
||||
self.min_value = min_value
|
||||
self.max_value = max_value
|
||||
|
||||
# this decorator is required when a Pydantic model is used in the inputs
|
||||
@validate_call
|
||||
async def run(self, inputs: ComponentInputModel) -> ComponentResultModel:
|
||||
# logic here
|
||||
random_value = random.randint(self.min_value, self.max_value)
|
||||
return ComponentResultModel(
|
||||
value=random_value,
|
||||
text=inputs.text * random_value,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
|
||||
c = MyComponent(min_value=0, max_value=10)
|
||||
print(
|
||||
asyncio.run(
|
||||
c.run(
|
||||
inputs={"text": "Hello"} # type: ignore
|
||||
)
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user