from datetime import datetime import gradio as gr # Organization details ORG_NAME = "Narrative I/O" DESCRIPTION = """ Narrative I/O builds tools and infrastructure for data processing and ML model development: * Data normalization and schema standardization * LLM fine-tuning and deployment infrastructure * Function calling and tool integration frameworks * Open-source ML model and dataset publishing Our platform focuses on solving practical data integration challenges through standardized APIs, normalized schemas, and deployable ML models. """ # News/Announcements ANNOUNCEMENTS = [ { "date": "2025-01-07", "title": "๐Ÿš€Narrative Model Studio Released", "content": ( "Today we're making Narrative Model Studio available to the public. " "[Model Studio](https://www.narrative.io/products/model-studio) is a platform to make it " "easy for *anyone* to train a LLM. Model Studio builds on top of our best in class Data " "Collaboration Platform and Data Marketplace to allow users to source, normalize, and " "package data for training, with no technical expertise required. That data can then be " "used to fine-tune an LLM for enterprise specific use cases and further deployed to " "inference endpoints." ), }, { "date": "2025-01-07", "title": "๐Ÿ”„ Rosetta Stone 2.0 Private Model Release", "content": ( "Today we are releasing our [Rosetta Stone 2.0](" "https://www.narrative.io/products/rosetta-stone) Private Model. When we started " "Narrative we set out to make it easier for everyone to work with data. One of the " "biggest challenges we found users faced was the lack of a normalization layer across " "different data sources, both internally and externally. We built Rosetta Stone to " "tackle this problem by using AI to normalize data to a common ontology and syntax, " "and making that normalized data directly queryable. Rosetta Stone 2.0 builds on the " "first version by leveraging the latest LLM Models and fine tuning them to perform " "even better than the first version. This release also marks the first time that the " "model is available for users to host on their own infrastructure, further reducing " "governance and compliance burdens." ), }, { "date": "2025-01-07", "title": "๐ŸŽฏ Public Function Calling Models + Dataset Released", "content": ( "Today we're excited to announce the release of our specialized function calling models " "and accompanying dataset. We've launched both 3B and 8B parameter models (with a 70B " "version coming soon) that have been meticulously fine-tuned for function calling " "applications. These models are built on our newly created normalized function calling " "dataset, which standardizes the approach to tool use in LLMs. Our implementation adopts " "a more standardized JSON schema for function calls, coupled with token enforcement " "through our [LLM Tools](https://github.com/narrative-io/narrative-llm-tools) to ensure " "models consistently respond using available functions. This makes these models " "particularly well-suited for enterprise applications where LLMs operate as backend " "processors, making tool calls on users' behalf rather than generating direct responses " "(though user interaction is still possible through a dedicated respond_to_user tool)." ), }, { "date": "2025-01-07", "title": "๐Ÿ› ๏ธ Narrative LLM Tools Released", "content": ( "Today, we're excited to announce the release of our [LLM Tools Github repository](" "https://github.com/narrative-io/narrative-llm-tools). Narrative LLM Tools are a " "collection of tools that make it easier to use LLMs trained in Narrative's Model " "Studio alongside HuggingFace's Inference Endpoints." ), }, ] # Public Models # PUBLIC_MODELS = [ # { # "name": "entity-matcher-v1", # "description": "High-performance entity matching model", # "link": "https://huggingface.co/Narrative-IO/entity-matcher-v1" # }, # { # "name": "data-enrichment-v2", # "description": "Advanced data enrichment pipeline", # "link": "https://huggingface.co/Narrative-IO/data-enrichment-v2" # } # ] # Public Datasets PUBLIC_DATASETS = [ { "name": "narrative-function-calling-v1", "description": "Function calling dataset for LLM training and evaluation", "link": "https://huggingface.co/datasets/narrative-io/narrative-function-calling-v1", } ] # Demo configurations DEMOS = [ { "title": "Coming Soon", }, ] # Custom CSS for styling custom_css = """ body { background: #1438f5; } .container { gap: 1rem; } .card { border-radius: 10px; padding: 20px; background: #ffffff; /* surface-a */ box-shadow: 0 4px 6px rgba(3, 21, 83, 0.1); /* text-color with opacity */ margin-bottom: 1rem; } .main-card { background: linear-gradient(135deg, #ecf1f9 0%, #e0e4f5 100%); /* surface-b to surface-c */ } h1 { font-size: 20px; font-weight: bold; margin-bottom: 10px; color: #031553; /* text-color */ } h2, strong, h3 { font-size: 16px; color: #415290; /* text-color-secondary */ margin-bottom: 15px; } p, span, li, em { font-size: 14px; color: #415290; /* text-color-secondary */ margin-bottom: 15px; } em { font-style: italic; } .news-item { padding: 10px 0; border-bottom: 1px solid #ced4da; /* surface-d */ } .news-date { font-size: 14px; color: #415290; /* text-color-secondary */ } .model-item, .dataset-item { padding: 10px; margin: 5px 0; background: #ecf1f9; /* surface-b */ border-radius: 5px; } .gr-button { background-color: #081662 !important; color: white !important; } """ def format_date(date_str): date = datetime.strptime(date_str, "%Y-%m-%d") return date.strftime("%B %d, %Y") def create_organization_page(): """Creates the organization page with multiple cards and demos""" with gr.Blocks(css=custom_css) as interface: with gr.Row(elem_classes="container"): # Left section (2/3 width) with gr.Column(scale=2): # Main organization card with gr.Column(elem_classes="card main-card"): gr.Markdown(f"# {ORG_NAME}", elem_classes="title") gr.Markdown(DESCRIPTION) with gr.Row(): gr.HTML( """
""" ) # News and Announcements with gr.Column(elem_classes="card"): gr.Markdown("## Latest News & Announcements") for announcement in ANNOUNCEMENTS: with gr.Row(elem_classes="news-item"): gr.Markdown( f""" **{announcement['title']}** ### {format_date(announcement['date'])} {announcement['content']} """ ) # Interactive Demos with gr.Column(elem_classes="card"): gr.Markdown("## Interactive Demos") gr.Markdown("Coming Soon") # Right section (1/3 width) with gr.Column(scale=1): # # Public Models card # with gr.Column(elem_classes="card"): # gr.Markdown("## Public Models") # for model in PUBLIC_MODELS: # with gr.Row(elem_classes="model-item"): # gr.Markdown(f""" # **{model['name']}** # {model['description']} # [View Model]({model['link']}) # """) # gr.Markdown( # "[View All Models โ†’](https://huggingface.co/collections/narrative-io/" # "public-models-6777e756fe3748f33c403a31)", # elem_classes="view-all-link" # ) # Public Datasets card with gr.Column(elem_classes="card"): gr.Markdown("## Public Datasets") for dataset in PUBLIC_DATASETS: with gr.Row(elem_classes="dataset-item"): gr.Markdown( f""" **{dataset['name']}** {dataset['description']} [View Dataset]({dataset['link']}) """ ) gr.Markdown( "[View All Datasets โ†’](https://huggingface.co/collections/narrative-io/" "public-datasets-6777e72061a6437f5d3ce491)", elem_classes="view-all-link", ) return interface # Create and launch the interface demo = create_organization_page() # Launch the app if __name__ == "__main__": demo.launch()