this logic is wrong cuz aint no way
This commit is contained in:
1 file changed
+93
-36
@@ -2,9 +2,10 @@
|
||||
|
||||
import operator
|
||||
import random
|
||||
from collections import Counter
|
||||
from pathlib import Path
|
||||
from pprint import pprint
|
||||
from typing import Annotated, Literal, TypedDict, cast
|
||||
from typing import TYPE_CHECKING, Annotated, Any, Literal, TypedDict, cast
|
||||
|
||||
from langgraph.checkpoint.memory import InMemorySaver
|
||||
from langgraph.graph import END, StateGraph
|
||||
@@ -41,9 +42,9 @@ class State(TypedDict):
|
||||
simple_counter: Annotated[int, operator.add] # only up!
|
||||
counter: Annotated[SophisticatedCounter, operator.or_]
|
||||
rates: Annotated[SophisticatedRates, operator.or_]
|
||||
current_pools: list[PoolByCategory]
|
||||
this: Entity
|
||||
storage: list[Entity]
|
||||
current_pools: "list[PoolByCategory]"
|
||||
this: "Entity"
|
||||
storage: "Annotated[list[Entity], operator.add]"
|
||||
|
||||
|
||||
class Entity(TypedDict):
|
||||
@@ -164,6 +165,7 @@ class CounterUp:
|
||||
return {
|
||||
"counter": {
|
||||
"c_80": 0,
|
||||
"c_10": 0,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -209,7 +211,7 @@ def roll(state: State):
|
||||
this = Entity(category=t["category"], name=random.choice(t["pool"]))
|
||||
return {
|
||||
"this": this,
|
||||
"storage": [*state.get("storage", []), this],
|
||||
"storage": [this],
|
||||
}
|
||||
|
||||
|
||||
@@ -312,10 +314,77 @@ context: Context = {
|
||||
},
|
||||
"type": "banner",
|
||||
}
|
||||
if __name__ == "__main__":
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
def build_input(
|
||||
rolling: int, rolled_previously: int = 0, until_5: int = 10, until_6: int = 80
|
||||
) -> Input:
|
||||
if not 0 < until_5 <= 10:
|
||||
print(f"{until_5 = } invalid, idc")
|
||||
if not 0 < until_6 <= 80:
|
||||
print(f"{until_6 = } invalid, running anyways")
|
||||
return {
|
||||
"countdown": rolling,
|
||||
"simple_counter": rolled_previously,
|
||||
"counter": {
|
||||
"c_10": 10 - until_5,
|
||||
"c_80": 80 - until_6,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from langgraph.graph.state import CompiledStateGraph
|
||||
|
||||
|
||||
def running_lite(
|
||||
app: "CompiledStateGraph[State, Context, Input, State]",
|
||||
input: Input,
|
||||
config: RunnableConfig,
|
||||
context: Context | None = context,
|
||||
*,
|
||||
display: bool = False,
|
||||
) -> dict[str, Any] | Any:
|
||||
r = app.invoke(
|
||||
input,
|
||||
config,
|
||||
context=context,
|
||||
stream_mode="updates",
|
||||
)
|
||||
s = cast(State, app.get_state(config=config).values)["storage"]
|
||||
if display:
|
||||
print(
|
||||
"\n".join(
|
||||
f"{ {'1': ' ', '10': '. ', '80': '! ', '240': '!!'}[i['category']] }: {i['name']}"
|
||||
for i in s
|
||||
)
|
||||
)
|
||||
return r, s
|
||||
|
||||
|
||||
def how_good_is_my_luck(
|
||||
repeat: int,
|
||||
app: "CompiledStateGraph[State, Context, Input, State]",
|
||||
input: Input,
|
||||
context: Context | None = context,
|
||||
):
|
||||
r: list[list[Entity]] = [
|
||||
app.invoke(
|
||||
input,
|
||||
RunnableConfig(configurable={"thread_id": f"lda {i + 1}"}),
|
||||
context=context,
|
||||
)["storage"]
|
||||
for i in range(repeat)
|
||||
]
|
||||
|
||||
pprint([dict(sorted(Counter(i["category"] for i in x).items())) for x in r])
|
||||
return r
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# from dotenv import load_dotenv
|
||||
|
||||
# load_dotenv()
|
||||
mm = app.get_graph().draw_mermaid()
|
||||
folder = Path(__file__).parent
|
||||
(folder / "graph.md").write_text(f"""# graph
|
||||
@@ -327,33 +396,21 @@ if __name__ == "__main__":
|
||||
(folder / "graph.mermaid").write_text(mm)
|
||||
|
||||
config: RunnableConfig = {"configurable": {"thread_id": "random ahh"}}
|
||||
print("running:")
|
||||
# random.seed("6741") # tung tung tung
|
||||
pprint(
|
||||
app.invoke(
|
||||
{
|
||||
"countdown": 39, # hopefully after all of the stuff and gifts
|
||||
"simple_counter": 0,
|
||||
"counter": {
|
||||
"c_10": 10 - 1,
|
||||
"c_80": 80 - 51,
|
||||
},
|
||||
},
|
||||
config,
|
||||
context=context,
|
||||
stream_mode="updates",
|
||||
),
|
||||
|
||||
r, _ = running_lite(
|
||||
app, build_input(39, until_5=1, until_6=51), config, display=True
|
||||
)
|
||||
print()
|
||||
print("app state after run")
|
||||
v = app.get_state(config)
|
||||
pprint(v._asdict())
|
||||
# print()
|
||||
# print("value")
|
||||
# pprint(v.values)
|
||||
# h = app.get_state_history(config)
|
||||
# print()
|
||||
# print("hist")
|
||||
# for i, hi in enumerate(h):
|
||||
# print(f"hist step {i}")
|
||||
# pprint(hi._asdict())
|
||||
how_good_is_my_luck(10, app, build_input(120)) # BULLSHIT
|
||||
# [
|
||||
# {"1": 97, "10": 21, "240": 1, "80": 1},
|
||||
# {"1": 102, "10": 15, "240": 2, "80": 1},
|
||||
# {"1": 96, "10": 20, "240": 2, "80": 2},
|
||||
# {"1": 101, "10": 15, "240": 4},
|
||||
# {"1": 98, "10": 19, "240": 3},
|
||||
# {"1": 101, "10": 15, "240": 3, "80": 1},
|
||||
# {"1": 99, "10": 19, "240": 2},
|
||||
# {"1": 103, "10": 13, "240": 3, "80": 1},
|
||||
# {"1": 98, "10": 19, "240": 1, "80": 2},
|
||||
# {"1": 101, "10": 14, "240": 3, "80": 2},
|
||||
# ]
|
||||
Reference in new issue
Block a user