ClientApp

class ClientApp(client_fn: Callable[[Context], Client] | None = None, mods: list[Callable[[Message, Context, Callable[[Message, Context], Message]], Message]] | None = None)[source]

Bases : object

Application ClientApp Flower.

Exemples

En supposant une mise en œuvre typique d’un Client nommé FlowerClient, vous pouvez l’entourer d’un ClientApp comme suit :

class FlowerClient(NumPyClient):
    # ...

def client_fn(context: Context):
   return FlowerClient().to_client()

app = ClientApp(client_fn)

Methods

evaluate([action, mods])

Inscrivez une fonction d'évaluation avec le ClientApp.

lifespan()

Retournez un décorateur qui enregistre la fonction lifespan avec l'application client.

query([action, mods])

Inscrivez une fonction de requête avec le ClientApp.

train([action, mods])

Inscrivez une fonction d'entraînement avec le ClientApp.

evaluate(action: str = 'default', *, mods: list[Callable[[Message, Context, Callable[[Message, Context], Message]], Message]] | None = None) Callable[[Callable[[Message, Context], Message]], Callable[[Message, Context], Message]][source]

Inscrivez une fonction d’évaluation avec le ClientApp.

Paramètres:
  • action (str (default: "default")) – Nom d’action utilisé pour router les messages. Par défaut, « default ».

  • mods (Optional[list[Mod]] (default: None)) – Liste de modificateurs spécifiques aux fonctions.

Renvoie:

Un décorateur qui enregistre une fonction d’évaluation avec le ClientApp.

Type renvoyé:

Callable[[ClientAppCallable], ClientAppCallable]

Exemples

Enregistrement d’une fonction d’évaluation :

app = ClientApp()

@app.evaluate()
def evaluate(message: Message, context: Context) -> Message:
    print("Executing default evaluate function")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction d’évaluation avec un nom d’action personnalisé :

app = ClientApp()

# Messages with `message_type="evaluate.custom_action"` will be
# routed to this function.
@app.evaluate("custom_action")
def custom_action(message: Message, context: Context) -> Message:
    print("Executing evaluate function for custom action")
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction d’évaluation avec une Flower Mod spécifique à la fonction :

from flwr.client.mod import message_size_mod

app = ClientApp()

# Using the `mods` argument to apply a function-specific mod.
@app.evaluate(mods=[message_size_mod])
def evaluate(message: Message, context: Context) -> Message:
    print("Executing evaluate function with message size mod")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)
lifespan() Callable[[Callable[[Context], Iterator[None]]], Callable[[Context], Iterator[None]]][source]

Retournez un décorateur qui enregistre la fonction lifespan avec l’application client.

La fonction décorée doit accepter un objet Context et utiliser yield pour définir le comportement d’entrée et de sortie.

Exemples

app = ClientApp()

@app.lifespan()
def lifespan(context: Context) -> None:
    # Perform initialization tasks before the app starts
    print("Initializing ClientApp")

    yield  # ClientApp is running

    # Perform cleanup tasks after the app stops
    print("Cleaning up ClientApp")
query(action: str = 'default', *, mods: list[Callable[[Message, Context, Callable[[Message, Context], Message]], Message]] | None = None) Callable[[Callable[[Message, Context], Message]], Callable[[Message, Context], Message]][source]

Inscrivez une fonction de requête avec le ClientApp.

Paramètres:
  • action (str (default: "default")) – Nom d’action utilisé pour router les messages. Par défaut, « default ».

  • mods (Optional[list[Mod]] (default: None)) – Liste de modificateurs spécifiques aux fonctions.

Renvoie:

Un décorateur qui enregistre une fonction de requête avec le ClientApp.

Type renvoyé:

Callable[[ClientAppCallable], ClientAppCallable]

Exemples

Enregistrement d’une fonction de requête :

app = ClientApp()

@app.query()
def query(message: Message, context: Context) -> Message:
    print("Executing default query function")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction de requête avec un nom d’action personnalisé :

app = ClientApp()

# Messages with `message_type="query.custom_action"` will be
# routed to this function.
@app.query("custom_action")
def custom_action(message: Message, context: Context) -> Message:
    print("Executing query function for custom action")
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction de requête avec une Flower Mod spécifique à la fonction :

from flwr.client.mod import message_size_mod

app = ClientApp()

# Using the `mods` argument to apply a function-specific mod.
@app.query(mods=[message_size_mod])
def query(message: Message, context: Context) -> Message:
    print("Executing query function with message size mod")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)
train(action: str = 'default', *, mods: list[Callable[[Message, Context, Callable[[Message, Context], Message]], Message]] | None = None) Callable[[Callable[[Message, Context], Message]], Callable[[Message, Context], Message]][source]

Inscrivez une fonction d’entraînement avec le ClientApp.

Paramètres:
  • action (str (default: "default")) – Nom d’action utilisé pour router les messages. Par défaut, « default ».

  • mods (Optional[list[Mod]] (default: None)) – Liste de modificateurs spécifiques aux fonctions.

Renvoie:

Un décorateur qui enregistre une fonction d’entraînement avec le ClientApp.

Type renvoyé:

Callable[[ClientAppCallable], ClientAppCallable]

Exemples

Enregistrement d’une fonction d’entraînement :

app = ClientApp()

@app.train()
def train(message: Message, context: Context) -> Message:
    print("Executing default train function")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction d’entraînement avec un nom d’action personnalisé :

app = ClientApp()

# Messages with `message_type="train.custom_action"` will be
# routed to this function.
@app.train("custom_action")
def custom_action(message: Message, context: Context) -> Message:
    print("Executing train function for custom action")
    return Message(message.content, reply_to=message)

Enregistrement d’une fonction d’entraînement avec une Flower Mod spécifique à la fonction :

from flwr.client.mod import message_size_mod

app = ClientApp()

# Using the `mods` argument to apply a function-specific mod.
@app.train(mods=[message_size_mod])
def train(message: Message, context: Context) -> Message:
    print("Executing train function with message size mod")
    # Create and return an echo reply message
    return Message(message.content, reply_to=message)