{"componentChunkName":"component---src-templates-docs-js","path":"/docs","result":{"data":{"site":{"siteMetadata":{"sidebar":[{"label":"Get started","items":[{"text":"Introduction","url":"/docs/"},{"text":"Concept & Design","url":"/docs/concept"},{"text":"Installation & Setup","url":"/docs/install"},{"text":"Examples & Tutorials","url":"https://github.com/explosion/thinc/#-selected-examples-and-notebooks"},{"text":"Backprop 101","url":"/docs/backprop101"}]},{"label":"Usage","items":[{"text":"Configuration System","url":"/docs/usage-config"},{"text":"Defining & Using Models","url":"/docs/usage-models"},{"text":"Training Models","url":"/docs/usage-training"},{"text":"PyTorch, TensorFlow etc.","url":"/docs/usage-frameworks"},{"text":"Variable-length Sequences","url":"/docs/usage-sequences"},{"text":"Type Checking","url":"/docs/usage-type-checking"}]},{"label":"API","items":[{"text":"Model","url":"/docs/api-model"},{"text":"Layers","url":"/docs/api-layers"},{"text":"Optimizers","url":"/docs/api-optimizers"},{"text":"Initializers","url":"/docs/api-initializers"},{"text":"Schedules","url":"/docs/api-schedules"},{"text":"Losses","url":"/docs/api-loss"},{"text":"Config & Registry","url":"/docs/api-config"},{"text":"Types & Dataclasses","url":"/docs/api-types"},{"text":"Backends & Math","url":"/docs/api-backends"},{"text":"Utilities & Extras","url":"/docs/api-util"}]}]}},"markdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Thinc is a "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"lightweight deep learning library"}]},{"type":"text","value":" that offers an elegant,\ntype-checked, functional-programming API for "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"composing models"}]},{"type":"text","value":", with support\nfor layers defined in other frameworks such as "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"PyTorch"}]},{"type":"text","value":", "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"TensorFlow"}]},{"type":"text","value":" or\n"},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"MXNet"}]},{"type":"text","value":". You can use Thinc as an interface layer, a standalone toolkit or a\nflexible way to develop new models. Previous versions of Thinc have been running\nquietly in production in thousands of companies, via both\n"},{"type":"element","tagName":"a","properties":{"href":"https://spacy.io"},"children":[{"type":"text","value":"spaCy"}]},{"type":"text","value":" and "},{"type":"element","tagName":"a","properties":{"href":"https://prodi.gy"},"children":[{"type":"text","value":"Prodigy"}]},{"type":"text","value":". We wrote the new\nversion to let users "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"compose, configure and deploy custom models"}]},{"type":"text","value":" built with\ntheir favorite framework. The end result is a library quite different in its\ndesign, that’s easy to understand, plays well with others, and is a lot of fun\nto use."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"grid","properties":{"layout":"feature"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"code-screenshot","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"/docs/usage-type-checking"},"children":[{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 790px; "},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 41.919191919191924%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAECBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHZkqwP/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABBQJ//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJ//8QAGBAAAgMAAAAAAAAAAAAAAAAAAAEQIXH/2gAIAQEAAT8hdCxx/9oADAMBAAIAAwAAABD4L//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABoQAQACAwEAAAAAAAAAAAAAAAEAETFBUdH/2gAIAQEAAT8QqsrfCKvCDekn/9k='); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/cedec5196187990e59681c44ed43ded9/d8b2f/type_checking.webp 198w","/static/cedec5196187990e59681c44ed43ded9/8d48d/type_checking.webp 395w","/static/cedec5196187990e59681c44ed43ded9/199e2/type_checking.webp 790w","/static/cedec5196187990e59681c44ed43ded9/76841/type_checking.webp 1185w","/static/cedec5196187990e59681c44ed43ded9/8d934/type_checking.webp 1446w"],"sizes":"(max-width: 790px) 100vw, 790px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/cedec5196187990e59681c44ed43ded9/35ea4/type_checking.jpg 198w","/static/cedec5196187990e59681c44ed43ded9/667a3/type_checking.jpg 395w","/static/cedec5196187990e59681c44ed43ded9/b0325/type_checking.jpg 790w","/static/cedec5196187990e59681c44ed43ded9/2d0a7/type_checking.jpg 1185w","/static/cedec5196187990e59681c44ed43ded9/4d898/type_checking.jpg 1446w"],"sizes":"(max-width: 790px) 100vw, 790px","type":"image/jpeg"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/cedec5196187990e59681c44ed43ded9/b0325/type_checking.jpg","alt":"type checking","title":"type checking","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n    "}]}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Type-check your model definitions"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"with custom types and "},{"type":"element","tagName":"a","properties":{"href":"https://mypy.readthedocs.io/en/stable/"},"children":[{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"mypy"}]}]},{"type":"text","value":" plugin"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-type-checking"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"from thinc.api import PyTorchWrapper, TensorFlowWrapper\n\npt_model = PyTorchWrapper(create_pytorch_model())\ntf_model = TensorFlowWrapper(create_tensorflow_model())\n# You can even stitch together strange hybrids\n# (not efficient, but possible)\nfrankenmodel = chain(add(pt_model, tf_model), Linear(128), logistic())\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Wrap PyTorch, TensorFlow & MXNet models for use in your network"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-frameworks"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"def CaptionRater(\n    text_encoder: Model[List[str], Floats2d],\n    image_encoder: Model[List[Path], Floats2d]\n) -> Model[Tuple[List[str], List[Path]], Floats2d]:\n    return chain(\n        concatenate(\n          chain(get_item(0), text_encoder),\n          chain(get_item(1), image_encoder)\n        ),\n        residual(Relu(nO=300, dropout=0.2, normalize=True)),\n        Softmax(2)\n    )\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Concise functional-programming approach to model definition"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"using composition rather than inheritance"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-models"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"apply_on = lambda layer, i: chain(getitem(i), layer)\nwith Model.define_operators({\"^\": apply_on, \">>\": chain, \"|\": concatenate}):\n    model = (\n        (text_encoder ^ 0 | image_encoder ^ 1)\n        >> residual(Relu(nO=300, dropout=0.2, normalize=True)\n        >> Softmax(2)\n    )\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Optional custom infix notation via operator overloading"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-models#operators"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-ini"],"lang":"ini","title":"","small":"true"},"children":[{"type":"text","value":"[optimizer]\n@optimizers = \"Adam.v1\"\n\n[optimizer.learn_rate]\n@schedules = \"slanted_triangular.v1\"\nmax_rate = 0.1\nnum_steps = 5000\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Integrated config system"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"to describe trees of objects and hyperparameters"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-config"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"comment","value":" TODO: add one or two more lines to example "},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"from thinc.api import NumpyOps, set_current_ops\n\ndef CustomOps(NumpyOps):\n    def some_custom_op_my_layers_needs(...):\n        ...\nset_current_ops(CustomOps())\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Choice of extensible backends"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/api-backends"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"encode_sentence = chain(\n    list2ragged(),  # concatenate sequences\n    with_array(  # ignore outer sequence structure (temporarily)\n        concatenate(Embed(128, column=0), Embed(128, column=1)),\n        Mish(128, dropout=0.2, normalize=True)\n    ),\n    ParametricAttention(128),\n    reduce_mean()\n)\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"First-class support for variable-length sequences"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"multiple built-in sequence representations and your layers can use any object"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-sequences"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"],"lang":"python","title":"","small":"true"},"children":[{"type":"text","value":"for i in range(10):\n    for X, Y in train_batches:\n        Yh, backprop = model.begin_update(X)\n        loss, dYh = get_loss(Yh, Y)\n        backprop(dYh)\n        model.finish_update(optimizer)\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"small","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h5","properties":{},"children":[{"type":"text","value":"Low abstraction training loop"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"button","properties":{"to":"/docs/usage-training"},"children":[{"type":"text","value":"Read more"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"comment","value":" TODO: include more examples that we want to showcase "},{"type":"text","value":"\n"},{"type":"element","tagName":"tutorials","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"intro"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"transformers_tagger"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"parallel_training_ray"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}},"frontmatter":{"title":"Introduction","teaser":null,"next":"/docs/concept"}},"allMarkdownRemark":{"nodes":[{"fields":{"slug":"/docs/api-initializers"},"frontmatter":{"title":"Initializers"}},{"fields":{"slug":"/docs/api-config"},"frontmatter":{"title":"Config & Registry"}},{"fields":{"slug":"/docs/api-loss"},"frontmatter":{"title":"Loss Calculators"}},{"fields":{"slug":"/docs/api-model"},"frontmatter":{"title":"Model"}},{"fields":{"slug":"/docs/api-optimizers"},"frontmatter":{"title":"Optimizers"}},{"fields":{"slug":"/docs/api-schedules"},"frontmatter":{"title":"Schedules"}},{"fields":{"slug":"/docs/api-types"},"frontmatter":{"title":"Types & Dataclasses"}},{"fields":{"slug":"/docs/api-util"},"frontmatter":{"title":"Utilities & Extras"}},{"fields":{"slug":"/docs/backprop101"},"frontmatter":{"title":"Backpropagation 101"}},{"fields":{"slug":"/docs/concept"},"frontmatter":{"title":"Concept and Design"}},{"fields":{"slug":"/docs/"},"frontmatter":{"title":"Introduction"}},{"fields":{"slug":"/docs/install"},"frontmatter":{"title":"Installation & Setup"}},{"fields":{"slug":"/docs/usage-config"},"frontmatter":{"title":"Configuration System"}},{"fields":{"slug":"/docs/usage-frameworks"},"frontmatter":{"title":"PyTorch, TensorFlow & MXNet"}},{"fields":{"slug":"/docs/usage-models"},"frontmatter":{"title":"Defining and Using Models"}},{"fields":{"slug":"/docs/usage-sequences"},"frontmatter":{"title":"Variable-length sequences"}},{"fields":{"slug":"/docs/usage-training"},"frontmatter":{"title":"Training Models"}},{"fields":{"slug":"/docs/usage-type-checking"},"frontmatter":{"title":"Type Checking"}},{"fields":{"slug":"/docs/api-layers"},"frontmatter":{"title":"Layers"}},{"fields":{"slug":"/docs/api-backends"},"frontmatter":{"title":"Backends & Math"}}]},"headerTopRight":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE5ElEQVRIx53Uf1DTZRwH8Pc2yj+6K//oyq46vbzqss660zO6FMW8y0KZBekhJGE/+akJIZAwkCnboo1tbEO+m9v4NVB+OYYwhuD4LUj+CAQFxnJM9t2GRhooyp7O/VNKf8jed597nr9e93mez3MP8J/ww8U4GiaBSFXP5GaUIoH89XTF8BVLxdUBoh26PN9H2z0z92c8t+dm7rdfc5DSPnthcY8Nlf12v2rrbSyIF/xKju8RjFgEL5XXdKRr+waIpuvSfHHPZU9Z7++keWjMo6u7+CBHYiYCmTmaJzWDLzOz/h8MEyGHLWQd3XwUvB3CmuyIfFLVMjDX1j1GznRcI2c6RzynW6940pNOzif/UEzS4nX+KTElSIkpZeZdGoT40uCjoGCPBPwDGmZmAgVBTuWX4t2y6bayPs9A88j8hYYhz2DLKGkt65+PD5KS6I/zXPFB+ctitorx3YZcBnVlGJHGHuajYIQY06IWGFuHodaeha2gvf96QTuxKto8FkXbg0l111zTz/q7X/v/QmI3iroPb9LiCCHg6cxeaH/nb491GCnBJPc07LxGjPIbnnEcNqjoLMMfdJbhjiOzjvyZXU+qvi0ncYHy7rQt8ncSNknBKWz2c884EWjoRGbPxeQF93jrWDum8814UHQeLoUZd8I1flPJ1W+6D1azb6bUZNcl1iYRNQd7PypAUXLVU3sJDUIIK7X7ojbE0EkWgFaqHZN8I2yyVowV9+DeTgo3kyrh/qkK02nVKN2tAz3S+Ar3ixK/Do4eu8j0q3FdF84FVbeRdzN09xaATk4d6CwDnBl6796VrocrrZbhSK3y6+XKcC21dMV4YeWaicRyWKPLN9T82kCHqprIGwc0sx9uFizs8PFMpdTAEV0OS7gSljAK4zuppYQQuLcrVzh2qKb/DqLIWfaxu1sDBSR9i9iIJ8lYgByWPSpYIpSIMklBB1FwslXrncFKMsVWEet2iii3KaR40njB3UpvXQ+hYA9Vwsl+WKoMF1s5aA85HlXjL3w4HCwqdlsT3KvlcK+SwemvwK1VMtij1HAVnEL/pvxnyXvCxYE3XCZM0M2YmDoDW0Yxw2rQw5pdtsoSqZKMrZetHAuULx60DzVikphh6zDAVnsqwiqqEI0naJZPfVMEXZzab3FHpk1wkl7cIwT2YeMhm8kQZ6Eq4EovxzZEIne/xocOaRPsTtOSG3bTCltDHd5CCD5/LhZZ6zjLc7NO7ls86DR51xt2E2zGOmb+vuMswR4ZBFGKYF6U4u6iQW+5TbBPNDGss2qM3K/CrDESNYQwue9zlsKXjDuUGKeVsDgob4071QgQaplCRiR8Bi0PQZqChS5cMmrTLovo7QC12If9L6jCOK1i2mgK12mKc5U+TpL6zx3REOLjkWkVRq0qBiFazBLtB/oTiuEtB7Rka3HzpM/gxIwSrfUFDMtVJYBcxK/lxXz6mfSmT+CF88dQX5SPCp4QjQV5rF5Syfrk5VR0rRG96BOYiu3gBnCRuTIJnBfiwU/XeX+aJiT6NpQf8Ta4G7mMzNcSkfF87EsCbuXBEpfz9RIy5xvIj5SBF57P4u2SgBcm4eSESYmooFHNSynxDRRTDRBTjQzpibOQVppX54TmlWcH5wYcXsfxDcyT6iEpaYG0toMhPWkGP0qB7HApstYewj+BxMBZvJr8CAAAAABJRU5ErkJggg==","aspectRatio":0.6756756756756757,"src":"/static/a592cfceebdbf105bac40baa898f12a9/53f65/landing_top-right.png","srcSet":"/static/a592cfceebdbf105bac40baa898f12a9/a90ce/landing_top-right.png 125w,\n/static/a592cfceebdbf105bac40baa898f12a9/002c1/landing_top-right.png 250w,\n/static/a592cfceebdbf105bac40baa898f12a9/53f65/landing_top-right.png 500w,\n/static/a592cfceebdbf105bac40baa898f12a9/f26e3/landing_top-right.png 750w,\n/static/a592cfceebdbf105bac40baa898f12a9/5d2c5/landing_top-right.png 1000w,\n/static/a592cfceebdbf105bac40baa898f12a9/6050d/landing_top-right.png 1200w","sizes":"(max-width: 500px) 100vw, 500px"}}}},"pageContext":{"slug":"/docs/"}},"staticQueryHashes":["34836940","3699375715"]}