@saibolla/ada 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ada/SYSTEM.md +81 -0
- package/.ada/agents/researcher.md +69 -0
- package/.ada/agents/reviewer.md +92 -0
- package/.ada/agents/verifier.md +45 -0
- package/.ada/agents/writer.md +54 -0
- package/.ada/settings.json +32 -0
- package/.ada/themes/ada.json +85 -0
- package/.env.example +31 -0
- package/AGENTS.md +79 -0
- package/LICENSE +191 -0
- package/README.md +188 -0
- package/bin/ada.js +26 -0
- package/dist/bootstrap/sync.js +143 -0
- package/dist/cli.js +404 -0
- package/dist/config/paths.js +32 -0
- package/dist/index.js +10 -0
- package/dist/model/catalog.js +255 -0
- package/dist/model/commands.js +180 -0
- package/dist/pi/launch.js +33 -0
- package/dist/pi/package-presets.js +55 -0
- package/dist/pi/runtime.js +81 -0
- package/dist/pi/settings.js +108 -0
- package/dist/pi/web-access.js +74 -0
- package/dist/search/commands.js +12 -0
- package/dist/setup/doctor.js +126 -0
- package/dist/setup/preview.js +117 -0
- package/dist/setup/prompts.js +34 -0
- package/dist/setup/setup.js +98 -0
- package/dist/setup/update.js +133 -0
- package/dist/system/executables.js +38 -0
- package/dist/system/node-version.js +31 -0
- package/dist/system/open-url.js +35 -0
- package/dist/system/promise-polyfill.js +12 -0
- package/dist/ui/terminal.js +64 -0
- package/dist/web/launch.js +48 -0
- package/dist/web-search.js +1 -0
- package/extensions/docparser/constants.ts +62 -0
- package/extensions/docparser/deps.ts +584 -0
- package/extensions/docparser/doctor.ts +353 -0
- package/extensions/docparser/index.ts +9 -0
- package/extensions/docparser/input.ts +230 -0
- package/extensions/docparser/request.ts +67 -0
- package/extensions/docparser/schema.ts +82 -0
- package/extensions/docparser/tool.ts +305 -0
- package/extensions/docparser/types.ts +99 -0
- package/extensions/research-tools/alpha.ts +107 -0
- package/extensions/research-tools/header.ts +284 -0
- package/extensions/research-tools/help.ts +93 -0
- package/extensions/research-tools/project-scaffold.ts +64 -0
- package/extensions/research-tools/project.ts +123 -0
- package/extensions/research-tools/shared.ts +16 -0
- package/extensions/research-tools.ts +42 -0
- package/logo.d.mts +3 -0
- package/logo.mjs +14 -0
- package/metadata/commands.d.mts +46 -0
- package/metadata/commands.mjs +133 -0
- package/package.json +80 -0
- package/prompts/audit.md +17 -0
- package/prompts/autoresearch.md +66 -0
- package/prompts/compare.md +18 -0
- package/prompts/deepresearch.md +189 -0
- package/prompts/draft.md +19 -0
- package/prompts/jobs.md +16 -0
- package/prompts/litreview.md +18 -0
- package/prompts/log.md +14 -0
- package/prompts/replicate.md +24 -0
- package/prompts/review.md +18 -0
- package/prompts/watch.md +16 -0
- package/scripts/build-native-bundle.mjs +349 -0
- package/scripts/check-node-version.mjs +35 -0
- package/scripts/patch-embedded-pi.mjs +588 -0
- package/scripts/prepare-runtime-workspace.mjs +162 -0
- package/scripts/prune-runtime-deps.mjs +131 -0
- package/scripts/release.sh +152 -0
- package/skills/adaptyv/SKILL.md +112 -0
- package/skills/adaptyv/reference/api_reference.md +308 -0
- package/skills/adaptyv/reference/examples.md +913 -0
- package/skills/adaptyv/reference/experiments.md +360 -0
- package/skills/adaptyv/reference/protein_optimization.md +637 -0
- package/skills/aeon/SKILL.md +372 -0
- package/skills/aeon/references/anomaly_detection.md +154 -0
- package/skills/aeon/references/classification.md +144 -0
- package/skills/aeon/references/clustering.md +123 -0
- package/skills/aeon/references/datasets_benchmarking.md +387 -0
- package/skills/aeon/references/distances.md +256 -0
- package/skills/aeon/references/forecasting.md +140 -0
- package/skills/aeon/references/networks.md +289 -0
- package/skills/aeon/references/regression.md +118 -0
- package/skills/aeon/references/segmentation.md +163 -0
- package/skills/aeon/references/similarity_search.md +187 -0
- package/skills/aeon/references/transformations.md +246 -0
- package/skills/alpha-research/SKILL.md +42 -0
- package/skills/alpha-vantage/SKILL.md +142 -0
- package/skills/alpha-vantage/references/commodities.md +153 -0
- package/skills/alpha-vantage/references/economic-indicators.md +158 -0
- package/skills/alpha-vantage/references/forex-crypto.md +154 -0
- package/skills/alpha-vantage/references/fundamentals.md +223 -0
- package/skills/alpha-vantage/references/intelligence.md +138 -0
- package/skills/alpha-vantage/references/options.md +93 -0
- package/skills/alpha-vantage/references/technical-indicators.md +374 -0
- package/skills/alpha-vantage/references/time-series.md +157 -0
- package/skills/alphafold-database/SKILL.md +511 -0
- package/skills/alphafold-database/references/api_reference.md +423 -0
- package/skills/anndata/SKILL.md +398 -0
- package/skills/anndata/references/best_practices.md +525 -0
- package/skills/anndata/references/concatenation.md +396 -0
- package/skills/anndata/references/data_structure.md +314 -0
- package/skills/anndata/references/io_operations.md +404 -0
- package/skills/anndata/references/manipulation.md +516 -0
- package/skills/arboreto/SKILL.md +241 -0
- package/skills/arboreto/references/algorithms.md +138 -0
- package/skills/arboreto/references/basic_inference.md +151 -0
- package/skills/arboreto/references/distributed_computing.md +242 -0
- package/skills/arboreto/scripts/basic_grn_inference.py +97 -0
- package/skills/arxiv-database/SKILL.md +362 -0
- package/skills/arxiv-database/references/api_reference.md +430 -0
- package/skills/arxiv-database/scripts/arxiv_search.py +414 -0
- package/skills/astropy/SKILL.md +329 -0
- package/skills/astropy/references/coordinates.md +273 -0
- package/skills/astropy/references/cosmology.md +307 -0
- package/skills/astropy/references/fits.md +396 -0
- package/skills/astropy/references/tables.md +489 -0
- package/skills/astropy/references/time.md +404 -0
- package/skills/astropy/references/units.md +178 -0
- package/skills/astropy/references/wcs_and_other_modules.md +373 -0
- package/skills/autoresearch/SKILL.md +12 -0
- package/skills/benchling-integration/SKILL.md +478 -0
- package/skills/benchling-integration/references/api_endpoints.md +883 -0
- package/skills/benchling-integration/references/authentication.md +379 -0
- package/skills/benchling-integration/references/sdk_reference.md +774 -0
- package/skills/bgpt-paper-search/SKILL.md +81 -0
- package/skills/bindingdb-database/SKILL.md +332 -0
- package/skills/bindingdb-database/references/affinity_queries.md +178 -0
- package/skills/biopython/SKILL.md +441 -0
- package/skills/biopython/references/advanced.md +577 -0
- package/skills/biopython/references/alignment.md +362 -0
- package/skills/biopython/references/blast.md +455 -0
- package/skills/biopython/references/databases.md +484 -0
- package/skills/biopython/references/phylogenetics.md +566 -0
- package/skills/biopython/references/sequence_io.md +285 -0
- package/skills/biopython/references/structure.md +564 -0
- package/skills/biorxiv-database/SKILL.md +481 -0
- package/skills/biorxiv-database/references/api_reference.md +280 -0
- package/skills/biorxiv-database/scripts/biorxiv_search.py +445 -0
- package/skills/bioservices/SKILL.md +359 -0
- package/skills/bioservices/references/identifier_mapping.md +685 -0
- package/skills/bioservices/references/services_reference.md +636 -0
- package/skills/bioservices/references/workflow_patterns.md +811 -0
- package/skills/bioservices/scripts/batch_id_converter.py +347 -0
- package/skills/bioservices/scripts/compound_cross_reference.py +378 -0
- package/skills/bioservices/scripts/pathway_analysis.py +309 -0
- package/skills/bioservices/scripts/protein_analysis_workflow.py +408 -0
- package/skills/brenda-database/SKILL.md +717 -0
- package/skills/brenda-database/references/api_reference.md +537 -0
- package/skills/brenda-database/scripts/brenda_queries.py +844 -0
- package/skills/brenda-database/scripts/brenda_visualization.py +772 -0
- package/skills/brenda-database/scripts/enzyme_pathway_builder.py +1053 -0
- package/skills/cbioportal-database/SKILL.md +367 -0
- package/skills/cbioportal-database/references/study_exploration.md +128 -0
- package/skills/cellxgene-census/SKILL.md +509 -0
- package/skills/cellxgene-census/references/census_schema.md +182 -0
- package/skills/cellxgene-census/references/common_patterns.md +351 -0
- package/skills/chembl-database/SKILL.md +387 -0
- package/skills/chembl-database/references/api_reference.md +272 -0
- package/skills/chembl-database/scripts/example_queries.py +278 -0
- package/skills/cirq/SKILL.md +344 -0
- package/skills/cirq/references/building.md +307 -0
- package/skills/cirq/references/experiments.md +572 -0
- package/skills/cirq/references/hardware.md +515 -0
- package/skills/cirq/references/noise.md +515 -0
- package/skills/cirq/references/simulation.md +350 -0
- package/skills/cirq/references/transformation.md +416 -0
- package/skills/citation-management/SKILL.md +1113 -0
- package/skills/citation-management/assets/bibtex_template.bib +264 -0
- package/skills/citation-management/assets/citation_checklist.md +386 -0
- package/skills/citation-management/references/bibtex_formatting.md +908 -0
- package/skills/citation-management/references/citation_validation.md +794 -0
- package/skills/citation-management/references/google_scholar_search.md +725 -0
- package/skills/citation-management/references/metadata_extraction.md +870 -0
- package/skills/citation-management/references/pubmed_search.md +839 -0
- package/skills/citation-management/scripts/doi_to_bibtex.py +204 -0
- package/skills/citation-management/scripts/extract_metadata.py +569 -0
- package/skills/citation-management/scripts/format_bibtex.py +349 -0
- package/skills/citation-management/scripts/search_google_scholar.py +282 -0
- package/skills/citation-management/scripts/search_pubmed.py +398 -0
- package/skills/citation-management/scripts/validate_citations.py +497 -0
- package/skills/clinical-decision-support/SKILL.md +510 -0
- package/skills/clinical-decision-support/assets/biomarker_report_template.tex +380 -0
- package/skills/clinical-decision-support/assets/clinical_pathway_template.tex +222 -0
- package/skills/clinical-decision-support/assets/cohort_analysis_template.tex +359 -0
- package/skills/clinical-decision-support/assets/color_schemes.tex +149 -0
- package/skills/clinical-decision-support/assets/example_gbm_cohort.md +208 -0
- package/skills/clinical-decision-support/assets/recommendation_strength_guide.md +328 -0
- package/skills/clinical-decision-support/assets/treatment_recommendation_template.tex +529 -0
- package/skills/clinical-decision-support/references/README.md +129 -0
- package/skills/clinical-decision-support/references/biomarker_classification.md +719 -0
- package/skills/clinical-decision-support/references/clinical_decision_algorithms.md +604 -0
- package/skills/clinical-decision-support/references/evidence_synthesis.md +840 -0
- package/skills/clinical-decision-support/references/outcome_analysis.md +640 -0
- package/skills/clinical-decision-support/references/patient_cohort_analysis.md +427 -0
- package/skills/clinical-decision-support/references/treatment_recommendations.md +521 -0
- package/skills/clinical-decision-support/scripts/biomarker_classifier.py +384 -0
- package/skills/clinical-decision-support/scripts/build_decision_tree.py +447 -0
- package/skills/clinical-decision-support/scripts/create_cohort_tables.py +524 -0
- package/skills/clinical-decision-support/scripts/generate_survival_analysis.py +422 -0
- package/skills/clinical-decision-support/scripts/validate_cds_document.py +335 -0
- package/skills/clinical-reports/SKILL.md +1131 -0
- package/skills/clinical-reports/assets/case_report_template.md +352 -0
- package/skills/clinical-reports/assets/clinical_trial_csr_template.md +353 -0
- package/skills/clinical-reports/assets/clinical_trial_sae_template.md +359 -0
- package/skills/clinical-reports/assets/consult_note_template.md +305 -0
- package/skills/clinical-reports/assets/discharge_summary_template.md +453 -0
- package/skills/clinical-reports/assets/hipaa_compliance_checklist.md +395 -0
- package/skills/clinical-reports/assets/history_physical_template.md +305 -0
- package/skills/clinical-reports/assets/lab_report_template.md +309 -0
- package/skills/clinical-reports/assets/pathology_report_template.md +249 -0
- package/skills/clinical-reports/assets/quality_checklist.md +338 -0
- package/skills/clinical-reports/assets/radiology_report_template.md +318 -0
- package/skills/clinical-reports/assets/soap_note_template.md +253 -0
- package/skills/clinical-reports/references/README.md +236 -0
- package/skills/clinical-reports/references/case_report_guidelines.md +570 -0
- package/skills/clinical-reports/references/clinical_trial_reporting.md +693 -0
- package/skills/clinical-reports/references/data_presentation.md +530 -0
- package/skills/clinical-reports/references/diagnostic_reports_standards.md +629 -0
- package/skills/clinical-reports/references/medical_terminology.md +588 -0
- package/skills/clinical-reports/references/patient_documentation.md +744 -0
- package/skills/clinical-reports/references/peer_review_standards.md +585 -0
- package/skills/clinical-reports/references/regulatory_compliance.md +577 -0
- package/skills/clinical-reports/scripts/check_deidentification.py +346 -0
- package/skills/clinical-reports/scripts/compliance_checker.py +78 -0
- package/skills/clinical-reports/scripts/extract_clinical_data.py +102 -0
- package/skills/clinical-reports/scripts/format_adverse_events.py +103 -0
- package/skills/clinical-reports/scripts/generate_report_template.py +163 -0
- package/skills/clinical-reports/scripts/terminology_validator.py +133 -0
- package/skills/clinical-reports/scripts/validate_case_report.py +334 -0
- package/skills/clinical-reports/scripts/validate_trial_report.py +89 -0
- package/skills/clinicaltrials-database/SKILL.md +505 -0
- package/skills/clinicaltrials-database/references/api_reference.md +358 -0
- package/skills/clinicaltrials-database/scripts/query_clinicaltrials.py +215 -0
- package/skills/clinpgx-database/SKILL.md +636 -0
- package/skills/clinpgx-database/references/api_reference.md +757 -0
- package/skills/clinpgx-database/scripts/query_clinpgx.py +518 -0
- package/skills/clinvar-database/SKILL.md +360 -0
- package/skills/clinvar-database/references/api_reference.md +227 -0
- package/skills/clinvar-database/references/clinical_significance.md +218 -0
- package/skills/clinvar-database/references/data_formats.md +358 -0
- package/skills/cobrapy/SKILL.md +461 -0
- package/skills/cobrapy/references/api_quick_reference.md +655 -0
- package/skills/cobrapy/references/workflows.md +593 -0
- package/skills/consciousness-council/SKILL.md +150 -0
- package/skills/consciousness-council/references/advanced-configurations.md +96 -0
- package/skills/cosmic-database/SKILL.md +334 -0
- package/skills/cosmic-database/references/cosmic_data_reference.md +220 -0
- package/skills/cosmic-database/scripts/download_cosmic.py +231 -0
- package/skills/crawl4ai/SKILL.md +172 -0
- package/skills/dask/SKILL.md +454 -0
- package/skills/dask/references/arrays.md +497 -0
- package/skills/dask/references/bags.md +468 -0
- package/skills/dask/references/best-practices.md +277 -0
- package/skills/dask/references/dataframes.md +368 -0
- package/skills/dask/references/futures.md +541 -0
- package/skills/dask/references/schedulers.md +504 -0
- package/skills/datacommons-client/SKILL.md +253 -0
- package/skills/datacommons-client/references/getting_started.md +417 -0
- package/skills/datacommons-client/references/node.md +250 -0
- package/skills/datacommons-client/references/observation.md +185 -0
- package/skills/datacommons-client/references/resolve.md +246 -0
- package/skills/datamol/SKILL.md +704 -0
- package/skills/datamol/references/conformers_module.md +131 -0
- package/skills/datamol/references/core_api.md +130 -0
- package/skills/datamol/references/descriptors_viz.md +195 -0
- package/skills/datamol/references/fragments_scaffolds.md +174 -0
- package/skills/datamol/references/io_module.md +109 -0
- package/skills/datamol/references/reactions_data.md +218 -0
- package/skills/deep-research/SKILL.md +12 -0
- package/skills/deepchem/SKILL.md +595 -0
- package/skills/deepchem/references/api_reference.md +303 -0
- package/skills/deepchem/references/workflows.md +491 -0
- package/skills/deepchem/scripts/graph_neural_network.py +338 -0
- package/skills/deepchem/scripts/predict_solubility.py +224 -0
- package/skills/deepchem/scripts/transfer_learning.py +375 -0
- package/skills/deeptools/SKILL.md +529 -0
- package/skills/deeptools/assets/quick_reference.md +58 -0
- package/skills/deeptools/references/effective_genome_sizes.md +116 -0
- package/skills/deeptools/references/normalization_methods.md +410 -0
- package/skills/deeptools/references/tools_reference.md +533 -0
- package/skills/deeptools/references/workflows.md +474 -0
- package/skills/deeptools/scripts/validate_files.py +195 -0
- package/skills/deeptools/scripts/workflow_generator.py +454 -0
- package/skills/denario/SKILL.md +213 -0
- package/skills/denario/references/examples.md +494 -0
- package/skills/denario/references/installation.md +213 -0
- package/skills/denario/references/llm_configuration.md +265 -0
- package/skills/denario/references/research_pipeline.md +471 -0
- package/skills/depmap/SKILL.md +300 -0
- package/skills/depmap/references/dependency_analysis.md +178 -0
- package/skills/dhdna-profiler/SKILL.md +162 -0
- package/skills/dhdna-profiler/references/advanced-profiling.md +72 -0
- package/skills/diffdock/SKILL.md +481 -0
- package/skills/diffdock/assets/batch_template.csv +4 -0
- package/skills/diffdock/assets/custom_inference_config.yaml +90 -0
- package/skills/diffdock/references/confidence_and_limitations.md +182 -0
- package/skills/diffdock/references/parameters_reference.md +163 -0
- package/skills/diffdock/references/workflows_examples.md +392 -0
- package/skills/diffdock/scripts/analyze_results.py +334 -0
- package/skills/diffdock/scripts/prepare_batch_csv.py +254 -0
- package/skills/diffdock/scripts/setup_check.py +278 -0
- package/skills/dnanexus-integration/SKILL.md +381 -0
- package/skills/dnanexus-integration/references/app-development.md +247 -0
- package/skills/dnanexus-integration/references/configuration.md +646 -0
- package/skills/dnanexus-integration/references/data-operations.md +400 -0
- package/skills/dnanexus-integration/references/job-execution.md +412 -0
- package/skills/dnanexus-integration/references/python-sdk.md +523 -0
- package/skills/docker/SKILL.md +84 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +590 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/accept_changes.py +135 -0
- package/skills/docx/scripts/comment.py +318 -0
- package/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/docx/scripts/office/pack.py +159 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/scripts/office/soffice.py +183 -0
- package/skills/docx/scripts/office/unpack.py +132 -0
- package/skills/docx/scripts/office/validate.py +111 -0
- package/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/skills/docx/scripts/office/validators/base.py +847 -0
- package/skills/docx/scripts/office/validators/docx.py +446 -0
- package/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/drugbank-database/SKILL.md +188 -0
- package/skills/drugbank-database/references/chemical-analysis.md +590 -0
- package/skills/drugbank-database/references/data-access.md +242 -0
- package/skills/drugbank-database/references/drug-queries.md +386 -0
- package/skills/drugbank-database/references/interactions.md +425 -0
- package/skills/drugbank-database/references/targets-pathways.md +518 -0
- package/skills/drugbank-database/scripts/drugbank_helper.py +350 -0
- package/skills/edgartools/SKILL.md +136 -0
- package/skills/edgartools/references/ai-integration.md +274 -0
- package/skills/edgartools/references/companies.md +268 -0
- package/skills/edgartools/references/data-objects.md +237 -0
- package/skills/edgartools/references/entity-facts.md +372 -0
- package/skills/edgartools/references/filings.md +387 -0
- package/skills/edgartools/references/financial-data.md +274 -0
- package/skills/edgartools/references/xbrl.md +373 -0
- package/skills/eli5/SKILL.md +25 -0
- package/skills/ena-database/SKILL.md +202 -0
- package/skills/ena-database/references/api_reference.md +490 -0
- package/skills/ensembl-database/SKILL.md +309 -0
- package/skills/ensembl-database/references/api_endpoints.md +346 -0
- package/skills/ensembl-database/scripts/ensembl_query.py +427 -0
- package/skills/esm/SKILL.md +304 -0
- package/skills/esm/references/esm-c-api.md +583 -0
- package/skills/esm/references/esm3-api.md +452 -0
- package/skills/esm/references/forge-api.md +657 -0
- package/skills/esm/references/workflows.md +685 -0
- package/skills/etetoolkit/SKILL.md +621 -0
- package/skills/etetoolkit/references/api_reference.md +583 -0
- package/skills/etetoolkit/references/visualization.md +783 -0
- package/skills/etetoolkit/references/workflows.md +774 -0
- package/skills/etetoolkit/scripts/quick_visualize.py +214 -0
- package/skills/etetoolkit/scripts/tree_operations.py +229 -0
- package/skills/exploratory-data-analysis/SKILL.md +444 -0
- package/skills/exploratory-data-analysis/assets/report_template.md +196 -0
- package/skills/exploratory-data-analysis/references/bioinformatics_genomics_formats.md +664 -0
- package/skills/exploratory-data-analysis/references/chemistry_molecular_formats.md +664 -0
- package/skills/exploratory-data-analysis/references/general_scientific_formats.md +518 -0
- package/skills/exploratory-data-analysis/references/microscopy_imaging_formats.md +620 -0
- package/skills/exploratory-data-analysis/references/proteomics_metabolomics_formats.md +517 -0
- package/skills/exploratory-data-analysis/references/spectroscopy_analytical_formats.md +633 -0
- package/skills/exploratory-data-analysis/scripts/eda_analyzer.py +547 -0
- package/skills/fda-database/SKILL.md +516 -0
- package/skills/fda-database/references/animal_veterinary.md +377 -0
- package/skills/fda-database/references/api_basics.md +687 -0
- package/skills/fda-database/references/devices.md +632 -0
- package/skills/fda-database/references/drugs.md +468 -0
- package/skills/fda-database/references/foods.md +374 -0
- package/skills/fda-database/references/other.md +472 -0
- package/skills/fda-database/scripts/fda_examples.py +335 -0
- package/skills/fda-database/scripts/fda_query.py +440 -0
- package/skills/flowio/SKILL.md +606 -0
- package/skills/flowio/references/api_reference.md +372 -0
- package/skills/fluidsim/SKILL.md +347 -0
- package/skills/fluidsim/references/advanced_features.md +398 -0
- package/skills/fluidsim/references/installation.md +68 -0
- package/skills/fluidsim/references/output_analysis.md +283 -0
- package/skills/fluidsim/references/parameters.md +198 -0
- package/skills/fluidsim/references/simulation_workflow.md +172 -0
- package/skills/fluidsim/references/solvers.md +94 -0
- package/skills/fred-economic-data/SKILL.md +433 -0
- package/skills/fred-economic-data/references/api_basics.md +212 -0
- package/skills/fred-economic-data/references/categories.md +442 -0
- package/skills/fred-economic-data/references/geofred.md +588 -0
- package/skills/fred-economic-data/references/releases.md +642 -0
- package/skills/fred-economic-data/references/series.md +584 -0
- package/skills/fred-economic-data/references/sources.md +423 -0
- package/skills/fred-economic-data/references/tags.md +485 -0
- package/skills/fred-economic-data/scripts/fred_examples.py +354 -0
- package/skills/fred-economic-data/scripts/fred_query.py +590 -0
- package/skills/gene-database/SKILL.md +177 -0
- package/skills/gene-database/references/api_reference.md +404 -0
- package/skills/gene-database/references/common_workflows.md +428 -0
- package/skills/gene-database/scripts/batch_gene_lookup.py +298 -0
- package/skills/gene-database/scripts/fetch_gene_data.py +277 -0
- package/skills/gene-database/scripts/query_gene.py +251 -0
- package/skills/generate-image/SKILL.md +183 -0
- package/skills/generate-image/scripts/generate_image.py +281 -0
- package/skills/geniml/SKILL.md +316 -0
- package/skills/geniml/references/bedspace.md +127 -0
- package/skills/geniml/references/consensus_peaks.md +238 -0
- package/skills/geniml/references/region2vec.md +90 -0
- package/skills/geniml/references/scembed.md +197 -0
- package/skills/geniml/references/utilities.md +385 -0
- package/skills/geo-database/SKILL.md +813 -0
- package/skills/geo-database/references/geo_reference.md +829 -0
- package/skills/geomaster/README.md +105 -0
- package/skills/geomaster/SKILL.md +365 -0
- package/skills/geomaster/references/advanced-gis.md +376 -0
- package/skills/geomaster/references/big-data.md +363 -0
- package/skills/geomaster/references/code-examples.md +531 -0
- package/skills/geomaster/references/coordinate-systems.md +364 -0
- package/skills/geomaster/references/core-libraries.md +273 -0
- package/skills/geomaster/references/data-sources.md +330 -0
- package/skills/geomaster/references/gis-software.md +369 -0
- package/skills/geomaster/references/industry-applications.md +420 -0
- package/skills/geomaster/references/machine-learning.md +462 -0
- package/skills/geomaster/references/programming-languages.md +456 -0
- package/skills/geomaster/references/remote-sensing.md +370 -0
- package/skills/geomaster/references/scientific-domains.md +416 -0
- package/skills/geomaster/references/specialized-topics.md +428 -0
- package/skills/geomaster/references/troubleshooting.md +439 -0
- package/skills/geopandas/SKILL.md +249 -0
- package/skills/geopandas/references/crs-management.md +243 -0
- package/skills/geopandas/references/data-io.md +165 -0
- package/skills/geopandas/references/data-structures.md +70 -0
- package/skills/geopandas/references/geometric-operations.md +221 -0
- package/skills/geopandas/references/spatial-analysis.md +184 -0
- package/skills/geopandas/references/visualization.md +243 -0
- package/skills/get-available-resources/SKILL.md +275 -0
- package/skills/get-available-resources/scripts/detect_resources.py +401 -0
- package/skills/gget/SKILL.md +869 -0
- package/skills/gget/references/database_info.md +300 -0
- package/skills/gget/references/module_reference.md +467 -0
- package/skills/gget/references/workflows.md +814 -0
- package/skills/gget/scripts/batch_sequence_analysis.py +191 -0
- package/skills/gget/scripts/enrichment_pipeline.py +235 -0
- package/skills/gget/scripts/gene_analysis.py +161 -0
- package/skills/ginkgo-cloud-lab/SKILL.md +56 -0
- package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-optimization.md +85 -0
- package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-validation.md +71 -0
- package/skills/ginkgo-cloud-lab/references/fluorescent-pixel-art-generation.md +87 -0
- package/skills/glycoengineering/SKILL.md +338 -0
- package/skills/glycoengineering/references/glycan_databases.md +165 -0
- package/skills/gnomad-database/SKILL.md +395 -0
- package/skills/gnomad-database/references/graphql_queries.md +219 -0
- package/skills/gnomad-database/references/variant_interpretation.md +85 -0
- package/skills/gtars/SKILL.md +283 -0
- package/skills/gtars/references/cli.md +222 -0
- package/skills/gtars/references/coverage.md +172 -0
- package/skills/gtars/references/overlap.md +156 -0
- package/skills/gtars/references/python-api.md +211 -0
- package/skills/gtars/references/refget.md +147 -0
- package/skills/gtars/references/tokenizers.md +103 -0
- package/skills/gtex-database/SKILL.md +315 -0
- package/skills/gtex-database/references/api_reference.md +191 -0
- package/skills/gwas-database/SKILL.md +606 -0
- package/skills/gwas-database/references/api_reference.md +793 -0
- package/skills/hedgefundmonitor/SKILL.md +128 -0
- package/skills/hedgefundmonitor/references/api-overview.md +93 -0
- package/skills/hedgefundmonitor/references/datasets.md +150 -0
- package/skills/hedgefundmonitor/references/endpoints-combined.md +196 -0
- package/skills/hedgefundmonitor/references/endpoints-metadata.md +136 -0
- package/skills/hedgefundmonitor/references/endpoints-series-data.md +126 -0
- package/skills/hedgefundmonitor/references/examples.md +287 -0
- package/skills/hedgefundmonitor/references/parameters.md +104 -0
- package/skills/histolab/SKILL.md +676 -0
- package/skills/histolab/references/filters_preprocessing.md +514 -0
- package/skills/histolab/references/slide_management.md +172 -0
- package/skills/histolab/references/tile_extraction.md +421 -0
- package/skills/histolab/references/tissue_masks.md +251 -0
- package/skills/histolab/references/visualization.md +547 -0
- package/skills/hmdb-database/SKILL.md +194 -0
- package/skills/hmdb-database/references/hmdb_data_fields.md +267 -0
- package/skills/hypogenic/SKILL.md +653 -0
- package/skills/hypogenic/references/config_template.yaml +150 -0
- package/skills/hypothesis-generation/SKILL.md +297 -0
- package/skills/hypothesis-generation/assets/FORMATTING_GUIDE.md +672 -0
- package/skills/hypothesis-generation/assets/hypothesis_generation.sty +307 -0
- package/skills/hypothesis-generation/assets/hypothesis_report_template.tex +572 -0
- package/skills/hypothesis-generation/references/experimental_design_patterns.md +329 -0
- package/skills/hypothesis-generation/references/hypothesis_quality_criteria.md +198 -0
- package/skills/hypothesis-generation/references/literature_search_strategies.md +622 -0
- package/skills/imaging-data-commons/SKILL.md +843 -0
- package/skills/imaging-data-commons/references/bigquery_guide.md +556 -0
- package/skills/imaging-data-commons/references/cli_guide.md +272 -0
- package/skills/imaging-data-commons/references/clinical_data_guide.md +324 -0
- package/skills/imaging-data-commons/references/cloud_storage_guide.md +333 -0
- package/skills/imaging-data-commons/references/dicomweb_guide.md +399 -0
- package/skills/imaging-data-commons/references/digital_pathology_guide.md +403 -0
- package/skills/imaging-data-commons/references/index_tables_guide.md +146 -0
- package/skills/imaging-data-commons/references/sql_patterns.md +207 -0
- package/skills/imaging-data-commons/references/use_cases.md +186 -0
- package/skills/infographics/SKILL.md +563 -0
- package/skills/infographics/references/color_palettes.md +496 -0
- package/skills/infographics/references/design_principles.md +636 -0
- package/skills/infographics/references/infographic_types.md +907 -0
- package/skills/infographics/scripts/generate_infographic.py +234 -0
- package/skills/infographics/scripts/generate_infographic_ai.py +1290 -0
- package/skills/interpro-database/SKILL.md +305 -0
- package/skills/interpro-database/references/domain_analysis.md +159 -0
- package/skills/iso-13485-certification/SKILL.md +678 -0
- package/skills/iso-13485-certification/assets/templates/procedures/CAPA-procedure-template.md +453 -0
- package/skills/iso-13485-certification/assets/templates/procedures/document-control-procedure-template.md +567 -0
- package/skills/iso-13485-certification/assets/templates/quality-manual-template.md +521 -0
- package/skills/iso-13485-certification/references/gap-analysis-checklist.md +568 -0
- package/skills/iso-13485-certification/references/iso-13485-requirements.md +610 -0
- package/skills/iso-13485-certification/references/mandatory-documents.md +606 -0
- package/skills/iso-13485-certification/references/quality-manual-guide.md +688 -0
- package/skills/iso-13485-certification/scripts/gap_analyzer.py +440 -0
- package/skills/jaspar-database/SKILL.md +351 -0
- package/skills/jaspar-database/references/api_reference.md +182 -0
- package/skills/jobs/SKILL.md +10 -0
- package/skills/kegg-database/SKILL.md +375 -0
- package/skills/kegg-database/references/kegg_reference.md +326 -0
- package/skills/kegg-database/scripts/kegg_api.py +251 -0
- package/skills/labarchive-integration/SKILL.md +266 -0
- package/skills/labarchive-integration/references/api_reference.md +342 -0
- package/skills/labarchive-integration/references/authentication_guide.md +357 -0
- package/skills/labarchive-integration/references/integrations.md +425 -0
- package/skills/labarchive-integration/scripts/entry_operations.py +334 -0
- package/skills/labarchive-integration/scripts/notebook_operations.py +269 -0
- package/skills/labarchive-integration/scripts/setup_config.py +205 -0
- package/skills/lamindb/SKILL.md +388 -0
- package/skills/lamindb/references/annotation-validation.md +513 -0
- package/skills/lamindb/references/core-concepts.md +380 -0
- package/skills/lamindb/references/data-management.md +433 -0
- package/skills/lamindb/references/integrations.md +642 -0
- package/skills/lamindb/references/ontologies.md +497 -0
- package/skills/lamindb/references/setup-deployment.md +733 -0
- package/skills/latchbio-integration/SKILL.md +351 -0
- package/skills/latchbio-integration/references/data-management.md +427 -0
- package/skills/latchbio-integration/references/resource-configuration.md +429 -0
- package/skills/latchbio-integration/references/verified-workflows.md +487 -0
- package/skills/latchbio-integration/references/workflow-creation.md +254 -0
- package/skills/latex-posters/SKILL.md +1602 -0
- package/skills/latex-posters/assets/baposter_template.tex +257 -0
- package/skills/latex-posters/assets/beamerposter_template.tex +244 -0
- package/skills/latex-posters/assets/poster_quality_checklist.md +358 -0
- package/skills/latex-posters/assets/tikzposter_template.tex +251 -0
- package/skills/latex-posters/references/README.md +417 -0
- package/skills/latex-posters/references/latex_poster_packages.md +745 -0
- package/skills/latex-posters/references/poster_content_guide.md +748 -0
- package/skills/latex-posters/references/poster_design_principles.md +806 -0
- package/skills/latex-posters/references/poster_layout_design.md +900 -0
- package/skills/latex-posters/scripts/review_poster.sh +214 -0
- package/skills/literature-review/SKILL.md +637 -0
- package/skills/literature-review/assets/review_template.md +412 -0
- package/skills/literature-review/references/citation_styles.md +166 -0
- package/skills/literature-review/references/database_strategies.md +455 -0
- package/skills/literature-review/scripts/generate_pdf.py +176 -0
- package/skills/literature-review/scripts/search_databases.py +303 -0
- package/skills/literature-review/scripts/verify_citations.py +222 -0
- package/skills/markdown-mermaid-writing/SKILL.md +327 -0
- package/skills/markdown-mermaid-writing/assets/examples/example-research-report.md +221 -0
- package/skills/markdown-mermaid-writing/references/diagrams/architecture.md +108 -0
- package/skills/markdown-mermaid-writing/references/diagrams/block.md +177 -0
- package/skills/markdown-mermaid-writing/references/diagrams/c4.md +136 -0
- package/skills/markdown-mermaid-writing/references/diagrams/class.md +246 -0
- package/skills/markdown-mermaid-writing/references/diagrams/complex_examples.md +384 -0
- package/skills/markdown-mermaid-writing/references/diagrams/er.md +222 -0
- package/skills/markdown-mermaid-writing/references/diagrams/flowchart.md +177 -0
- package/skills/markdown-mermaid-writing/references/diagrams/gantt.md +138 -0
- package/skills/markdown-mermaid-writing/references/diagrams/git_graph.md +74 -0
- package/skills/markdown-mermaid-writing/references/diagrams/kanban.md +107 -0
- package/skills/markdown-mermaid-writing/references/diagrams/mindmap.md +74 -0
- package/skills/markdown-mermaid-writing/references/diagrams/packet.md +55 -0
- package/skills/markdown-mermaid-writing/references/diagrams/pie.md +52 -0
- package/skills/markdown-mermaid-writing/references/diagrams/quadrant.md +66 -0
- package/skills/markdown-mermaid-writing/references/diagrams/radar.md +59 -0
- package/skills/markdown-mermaid-writing/references/diagrams/requirement.md +88 -0
- package/skills/markdown-mermaid-writing/references/diagrams/sankey.md +71 -0
- package/skills/markdown-mermaid-writing/references/diagrams/sequence.md +174 -0
- package/skills/markdown-mermaid-writing/references/diagrams/state.md +150 -0
- package/skills/markdown-mermaid-writing/references/diagrams/timeline.md +96 -0
- package/skills/markdown-mermaid-writing/references/diagrams/treemap.md +66 -0
- package/skills/markdown-mermaid-writing/references/diagrams/user_journey.md +108 -0
- package/skills/markdown-mermaid-writing/references/diagrams/xy_chart.md +53 -0
- package/skills/markdown-mermaid-writing/references/diagrams/zenuml.md +71 -0
- package/skills/markdown-mermaid-writing/references/markdown_style_guide.md +733 -0
- package/skills/markdown-mermaid-writing/references/mermaid_style_guide.md +458 -0
- package/skills/markdown-mermaid-writing/templates/decision_record.md +211 -0
- package/skills/markdown-mermaid-writing/templates/how_to_guide.md +275 -0
- package/skills/markdown-mermaid-writing/templates/issue.md +303 -0
- package/skills/markdown-mermaid-writing/templates/kanban.md +223 -0
- package/skills/markdown-mermaid-writing/templates/presentation.md +312 -0
- package/skills/markdown-mermaid-writing/templates/project_documentation.md +412 -0
- package/skills/markdown-mermaid-writing/templates/pull_request.md +319 -0
- package/skills/markdown-mermaid-writing/templates/research_paper.md +304 -0
- package/skills/markdown-mermaid-writing/templates/status_report.md +185 -0
- package/skills/market-research-reports/SKILL.md +905 -0
- package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +428 -0
- package/skills/market-research-reports/assets/market_report_template.tex +1380 -0
- package/skills/market-research-reports/assets/market_research.sty +564 -0
- package/skills/market-research-reports/references/data_analysis_patterns.md +548 -0
- package/skills/market-research-reports/references/report_structure_guide.md +999 -0
- package/skills/market-research-reports/references/visual_generation_guide.md +1077 -0
- package/skills/market-research-reports/scripts/generate_market_visuals.py +529 -0
- package/skills/markitdown/SKILL.md +488 -0
- package/skills/markitdown/assets/example_usage.md +463 -0
- package/skills/markitdown/references/api_reference.md +396 -0
- package/skills/markitdown/references/file_formats.md +542 -0
- package/skills/markitdown/scripts/batch_convert.py +228 -0
- package/skills/markitdown/scripts/convert_literature.py +283 -0
- package/skills/markitdown/scripts/convert_with_ai.py +240 -0
- package/skills/matchms/SKILL.md +201 -0
- package/skills/matchms/references/filtering.md +288 -0
- package/skills/matchms/references/importing_exporting.md +416 -0
- package/skills/matchms/references/similarity.md +380 -0
- package/skills/matchms/references/workflows.md +647 -0
- package/skills/matlab/SKILL.md +376 -0
- package/skills/matlab/references/data-import-export.md +479 -0
- package/skills/matlab/references/executing-scripts.md +444 -0
- package/skills/matlab/references/graphics-visualization.md +579 -0
- package/skills/matlab/references/mathematics.md +553 -0
- package/skills/matlab/references/matrices-arrays.md +349 -0
- package/skills/matlab/references/octave-compatibility.md +544 -0
- package/skills/matlab/references/programming.md +672 -0
- package/skills/matlab/references/python-integration.md +433 -0
- package/skills/matplotlib/SKILL.md +359 -0
- package/skills/matplotlib/references/api_reference.md +412 -0
- package/skills/matplotlib/references/common_issues.md +563 -0
- package/skills/matplotlib/references/plot_types.md +476 -0
- package/skills/matplotlib/references/styling_guide.md +589 -0
- package/skills/matplotlib/scripts/plot_template.py +401 -0
- package/skills/matplotlib/scripts/style_configurator.py +409 -0
- package/skills/medchem/SKILL.md +404 -0
- package/skills/medchem/references/api_guide.md +600 -0
- package/skills/medchem/references/rules_catalog.md +604 -0
- package/skills/medchem/scripts/filter_molecules.py +418 -0
- package/skills/metabolomics-workbench-database/SKILL.md +257 -0
- package/skills/metabolomics-workbench-database/references/api_reference.md +494 -0
- package/skills/modal/SKILL.md +406 -0
- package/skills/modal/references/api_reference.md +187 -0
- package/skills/modal/references/examples.md +266 -0
- package/skills/modal/references/functions.md +260 -0
- package/skills/modal/references/getting-started.md +175 -0
- package/skills/modal/references/gpu.md +174 -0
- package/skills/modal/references/images.md +259 -0
- package/skills/modal/references/resources.md +117 -0
- package/skills/modal/references/scaling.md +173 -0
- package/skills/modal/references/scheduled-jobs.md +143 -0
- package/skills/modal/references/secrets.md +119 -0
- package/skills/modal/references/volumes.md +247 -0
- package/skills/modal/references/web-endpoints.md +254 -0
- package/skills/modal-compute/SKILL.md +56 -0
- package/skills/molecular-dynamics/SKILL.md +457 -0
- package/skills/molecular-dynamics/references/mdanalysis_analysis.md +208 -0
- package/skills/molfeat/SKILL.md +509 -0
- package/skills/molfeat/references/api_reference.md +428 -0
- package/skills/molfeat/references/available_featurizers.md +333 -0
- package/skills/molfeat/references/examples.md +723 -0
- package/skills/monarch-database/SKILL.md +372 -0
- package/skills/monarch-database/references/phenotype_ontology.md +160 -0
- package/skills/networkx/SKILL.md +435 -0
- package/skills/networkx/references/algorithms.md +383 -0
- package/skills/networkx/references/generators.md +378 -0
- package/skills/networkx/references/graph-basics.md +283 -0
- package/skills/networkx/references/io.md +441 -0
- package/skills/networkx/references/visualization.md +529 -0
- package/skills/neurokit2/SKILL.md +354 -0
- package/skills/neurokit2/references/bio_module.md +417 -0
- package/skills/neurokit2/references/complexity.md +715 -0
- package/skills/neurokit2/references/ecg_cardiac.md +355 -0
- package/skills/neurokit2/references/eda.md +497 -0
- package/skills/neurokit2/references/eeg.md +506 -0
- package/skills/neurokit2/references/emg.md +408 -0
- package/skills/neurokit2/references/eog.md +407 -0
- package/skills/neurokit2/references/epochs_events.md +471 -0
- package/skills/neurokit2/references/hrv.md +480 -0
- package/skills/neurokit2/references/ppg.md +413 -0
- package/skills/neurokit2/references/rsp.md +510 -0
- package/skills/neurokit2/references/signal_processing.md +648 -0
- package/skills/neuropixels-analysis/SKILL.md +348 -0
- package/skills/neuropixels-analysis/assets/analysis_template.py +271 -0
- package/skills/neuropixels-analysis/references/AI_CURATION.md +345 -0
- package/skills/neuropixels-analysis/references/ANALYSIS.md +392 -0
- package/skills/neuropixels-analysis/references/AUTOMATED_CURATION.md +358 -0
- package/skills/neuropixels-analysis/references/MOTION_CORRECTION.md +323 -0
- package/skills/neuropixels-analysis/references/PREPROCESSING.md +273 -0
- package/skills/neuropixels-analysis/references/QUALITY_METRICS.md +359 -0
- package/skills/neuropixels-analysis/references/SPIKE_SORTING.md +339 -0
- package/skills/neuropixels-analysis/references/api_reference.md +415 -0
- package/skills/neuropixels-analysis/references/plotting_guide.md +454 -0
- package/skills/neuropixels-analysis/references/standard_workflow.md +385 -0
- package/skills/neuropixels-analysis/scripts/compute_metrics.py +178 -0
- package/skills/neuropixels-analysis/scripts/explore_recording.py +168 -0
- package/skills/neuropixels-analysis/scripts/export_to_phy.py +79 -0
- package/skills/neuropixels-analysis/scripts/neuropixels_pipeline.py +432 -0
- package/skills/neuropixels-analysis/scripts/preprocess_recording.py +122 -0
- package/skills/neuropixels-analysis/scripts/run_sorting.py +98 -0
- package/skills/offer-k-dense-web/SKILL.md +21 -0
- package/skills/omero-integration/SKILL.md +249 -0
- package/skills/omero-integration/references/advanced.md +631 -0
- package/skills/omero-integration/references/connection.md +369 -0
- package/skills/omero-integration/references/data_access.md +544 -0
- package/skills/omero-integration/references/image_processing.md +665 -0
- package/skills/omero-integration/references/metadata.md +688 -0
- package/skills/omero-integration/references/rois.md +648 -0
- package/skills/omero-integration/references/scripts.md +637 -0
- package/skills/omero-integration/references/tables.md +532 -0
- package/skills/open-notebook/SKILL.md +289 -0
- package/skills/open-notebook/references/api_reference.md +715 -0
- package/skills/open-notebook/references/architecture.md +163 -0
- package/skills/open-notebook/references/configuration.md +226 -0
- package/skills/open-notebook/references/examples.md +290 -0
- package/skills/open-notebook/scripts/chat_interaction.py +190 -0
- package/skills/open-notebook/scripts/notebook_management.py +142 -0
- package/skills/open-notebook/scripts/source_ingestion.py +160 -0
- package/skills/open-notebook/scripts/test_open_notebook_skill.py +423 -0
- package/skills/openalex-database/SKILL.md +496 -0
- package/skills/openalex-database/references/api_guide.md +371 -0
- package/skills/openalex-database/references/common_queries.md +381 -0
- package/skills/openalex-database/scripts/openalex_client.py +337 -0
- package/skills/openalex-database/scripts/query_helpers.py +306 -0
- package/skills/opentargets-database/SKILL.md +371 -0
- package/skills/opentargets-database/references/api_reference.md +249 -0
- package/skills/opentargets-database/references/evidence_types.md +306 -0
- package/skills/opentargets-database/references/target_annotations.md +401 -0
- package/skills/opentargets-database/scripts/query_opentargets.py +403 -0
- package/skills/opentrons-integration/SKILL.md +571 -0
- package/skills/opentrons-integration/references/api_reference.md +366 -0
- package/skills/opentrons-integration/scripts/basic_protocol_template.py +67 -0
- package/skills/opentrons-integration/scripts/pcr_setup_template.py +154 -0
- package/skills/opentrons-integration/scripts/serial_dilution_template.py +96 -0
- package/skills/paper-2-web/SKILL.md +495 -0
- package/skills/paper-2-web/references/installation.md +141 -0
- package/skills/paper-2-web/references/paper2poster.md +346 -0
- package/skills/paper-2-web/references/paper2video.md +305 -0
- package/skills/paper-2-web/references/paper2web.md +187 -0
- package/skills/paper-2-web/references/usage_examples.md +436 -0
- package/skills/paper-code-audit/SKILL.md +12 -0
- package/skills/paper-writing/SKILL.md +12 -0
- package/skills/parallel-web/SKILL.md +314 -0
- package/skills/parallel-web/references/api_reference.md +244 -0
- package/skills/parallel-web/references/deep_research_guide.md +362 -0
- package/skills/parallel-web/references/extraction_patterns.md +338 -0
- package/skills/parallel-web/references/search_best_practices.md +297 -0
- package/skills/parallel-web/references/workflow_recipes.md +456 -0
- package/skills/parallel-web/scripts/parallel_web.py +568 -0
- package/skills/parse-document/SKILL.md +139 -0
- package/skills/pathml/SKILL.md +164 -0
- package/skills/pathml/references/data_management.md +742 -0
- package/skills/pathml/references/graphs.md +653 -0
- package/skills/pathml/references/image_loading.md +448 -0
- package/skills/pathml/references/machine_learning.md +725 -0
- package/skills/pathml/references/multiparametric.md +686 -0
- package/skills/pathml/references/preprocessing.md +722 -0
- package/skills/pdb-database/SKILL.md +307 -0
- package/skills/pdb-database/references/api_reference.md +617 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +314 -0
- package/skills/pdf/forms.md +294 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/pdf/scripts/create_validation_image.py +37 -0
- package/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/peer-review/SKILL.md +569 -0
- package/skills/peer-review/references/common_issues.md +552 -0
- package/skills/peer-review/references/reporting_standards.md +290 -0
- package/skills/pennylane/SKILL.md +224 -0
- package/skills/pennylane/references/advanced_features.md +667 -0
- package/skills/pennylane/references/devices_backends.md +596 -0
- package/skills/pennylane/references/getting_started.md +227 -0
- package/skills/pennylane/references/optimization.md +671 -0
- package/skills/pennylane/references/quantum_chemistry.md +567 -0
- package/skills/pennylane/references/quantum_circuits.md +437 -0
- package/skills/pennylane/references/quantum_ml.md +571 -0
- package/skills/perplexity-search/SKILL.md +446 -0
- package/skills/perplexity-search/assets/.env.example +16 -0
- package/skills/perplexity-search/references/model_comparison.md +386 -0
- package/skills/perplexity-search/references/openrouter_setup.md +454 -0
- package/skills/perplexity-search/references/search_strategies.md +258 -0
- package/skills/perplexity-search/scripts/perplexity_search.py +277 -0
- package/skills/perplexity-search/scripts/setup_env.py +171 -0
- package/skills/phylogenetics/SKILL.md +404 -0
- package/skills/phylogenetics/references/iqtree_inference.md +181 -0
- package/skills/phylogenetics/scripts/phylogenetic_analysis.py +270 -0
- package/skills/plotly/SKILL.md +265 -0
- package/skills/plotly/references/chart-types.md +488 -0
- package/skills/plotly/references/export-interactivity.md +453 -0
- package/skills/plotly/references/graph-objects.md +302 -0
- package/skills/plotly/references/layouts-styling.md +457 -0
- package/skills/plotly/references/plotly-express.md +213 -0
- package/skills/polars/SKILL.md +385 -0
- package/skills/polars/references/best_practices.md +649 -0
- package/skills/polars/references/core_concepts.md +378 -0
- package/skills/polars/references/io_guide.md +557 -0
- package/skills/polars/references/operations.md +602 -0
- package/skills/polars/references/pandas_migration.md +417 -0
- package/skills/polars/references/transformations.md +549 -0
- package/skills/polars-bio/SKILL.md +374 -0
- package/skills/polars-bio/references/bioframe_migration.md +250 -0
- package/skills/polars-bio/references/configuration.md +175 -0
- package/skills/polars-bio/references/file_io.md +414 -0
- package/skills/polars-bio/references/interval_operations.md +362 -0
- package/skills/polars-bio/references/pileup_operations.md +176 -0
- package/skills/polars-bio/references/sql_processing.md +224 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +232 -0
- package/skills/pptx/editing.md +205 -0
- package/skills/pptx/pptxgenjs.md +420 -0
- package/skills/pptx/scripts/__init__.py +0 -0
- package/skills/pptx/scripts/add_slide.py +195 -0
- package/skills/pptx/scripts/clean.py +286 -0
- package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/pptx/scripts/office/pack.py +159 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/scripts/office/soffice.py +183 -0
- package/skills/pptx/scripts/office/unpack.py +132 -0
- package/skills/pptx/scripts/office/validate.py +111 -0
- package/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills/pptx/scripts/office/validators/base.py +847 -0
- package/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills/pptx/scripts/thumbnail.py +289 -0
- package/skills/pptx-posters/SKILL.md +414 -0
- package/skills/pptx-posters/assets/poster_html_template.html +257 -0
- package/skills/pptx-posters/assets/poster_quality_checklist.md +358 -0
- package/skills/pptx-posters/references/poster_content_guide.md +748 -0
- package/skills/pptx-posters/references/poster_design_principles.md +806 -0
- package/skills/pptx-posters/references/poster_layout_design.md +900 -0
- package/skills/preview/SKILL.md +27 -0
- package/skills/primekg/SKILL.md +97 -0
- package/skills/primekg/scripts/query_primekg.py +123 -0
- package/skills/protocolsio-integration/SKILL.md +419 -0
- package/skills/protocolsio-integration/references/additional_features.md +387 -0
- package/skills/protocolsio-integration/references/authentication.md +100 -0
- package/skills/protocolsio-integration/references/discussions.md +225 -0
- package/skills/protocolsio-integration/references/file_manager.md +412 -0
- package/skills/protocolsio-integration/references/protocols_api.md +294 -0
- package/skills/protocolsio-integration/references/workspaces.md +293 -0
- package/skills/pubchem-database/SKILL.md +572 -0
- package/skills/pubchem-database/references/api_reference.md +440 -0
- package/skills/pubchem-database/scripts/bioactivity_query.py +367 -0
- package/skills/pubchem-database/scripts/compound_search.py +297 -0
- package/skills/pubmed-database/SKILL.md +458 -0
- package/skills/pubmed-database/references/api_reference.md +298 -0
- package/skills/pubmed-database/references/common_queries.md +453 -0
- package/skills/pubmed-database/references/search_syntax.md +436 -0
- package/skills/pufferlib/SKILL.md +434 -0
- package/skills/pufferlib/references/environments.md +508 -0
- package/skills/pufferlib/references/integration.md +621 -0
- package/skills/pufferlib/references/policies.md +653 -0
- package/skills/pufferlib/references/training.md +360 -0
- package/skills/pufferlib/references/vectorization.md +557 -0
- package/skills/pufferlib/scripts/env_template.py +340 -0
- package/skills/pufferlib/scripts/train_template.py +239 -0
- package/skills/pydeseq2/SKILL.md +557 -0
- package/skills/pydeseq2/references/api_reference.md +228 -0
- package/skills/pydeseq2/references/workflow_guide.md +582 -0
- package/skills/pydeseq2/scripts/run_deseq2_analysis.py +353 -0
- package/skills/pydicom/SKILL.md +432 -0
- package/skills/pydicom/references/common_tags.md +228 -0
- package/skills/pydicom/references/transfer_syntaxes.md +352 -0
- package/skills/pydicom/scripts/anonymize_dicom.py +137 -0
- package/skills/pydicom/scripts/dicom_to_image.py +172 -0
- package/skills/pydicom/scripts/extract_metadata.py +173 -0
- package/skills/pyhealth/SKILL.md +489 -0
- package/skills/pyhealth/references/datasets.md +178 -0
- package/skills/pyhealth/references/medical_coding.md +284 -0
- package/skills/pyhealth/references/models.md +594 -0
- package/skills/pyhealth/references/preprocessing.md +638 -0
- package/skills/pyhealth/references/tasks.md +379 -0
- package/skills/pyhealth/references/training_evaluation.md +648 -0
- package/skills/pylabrobot/SKILL.md +183 -0
- package/skills/pylabrobot/references/analytical-equipment.md +464 -0
- package/skills/pylabrobot/references/hardware-backends.md +480 -0
- package/skills/pylabrobot/references/liquid-handling.md +403 -0
- package/skills/pylabrobot/references/material-handling.md +620 -0
- package/skills/pylabrobot/references/resources.md +489 -0
- package/skills/pylabrobot/references/visualization.md +532 -0
- package/skills/pymatgen/SKILL.md +689 -0
- package/skills/pymatgen/references/analysis_modules.md +530 -0
- package/skills/pymatgen/references/core_classes.md +318 -0
- package/skills/pymatgen/references/io_formats.md +469 -0
- package/skills/pymatgen/references/materials_project_api.md +517 -0
- package/skills/pymatgen/references/transformations_workflows.md +591 -0
- package/skills/pymatgen/scripts/phase_diagram_generator.py +233 -0
- package/skills/pymatgen/scripts/structure_analyzer.py +266 -0
- package/skills/pymatgen/scripts/structure_converter.py +169 -0
- package/skills/pymc/SKILL.md +570 -0
- package/skills/pymc/assets/hierarchical_model_template.py +333 -0
- package/skills/pymc/assets/linear_regression_template.py +241 -0
- package/skills/pymc/references/distributions.md +320 -0
- package/skills/pymc/references/sampling_inference.md +424 -0
- package/skills/pymc/references/workflows.md +526 -0
- package/skills/pymc/scripts/model_comparison.py +387 -0
- package/skills/pymc/scripts/model_diagnostics.py +350 -0
- package/skills/pymoo/SKILL.md +569 -0
- package/skills/pymoo/references/algorithms.md +180 -0
- package/skills/pymoo/references/constraints_mcdm.md +417 -0
- package/skills/pymoo/references/operators.md +345 -0
- package/skills/pymoo/references/problems.md +265 -0
- package/skills/pymoo/references/visualization.md +353 -0
- package/skills/pymoo/scripts/custom_problem_example.py +181 -0
- package/skills/pymoo/scripts/decision_making_example.py +161 -0
- package/skills/pymoo/scripts/many_objective_example.py +72 -0
- package/skills/pymoo/scripts/multi_objective_example.py +63 -0
- package/skills/pymoo/scripts/single_objective_example.py +59 -0
- package/skills/pyopenms/SKILL.md +215 -0
- package/skills/pyopenms/references/data_structures.md +497 -0
- package/skills/pyopenms/references/feature_detection.md +410 -0
- package/skills/pyopenms/references/file_io.md +349 -0
- package/skills/pyopenms/references/identification.md +422 -0
- package/skills/pyopenms/references/metabolomics.md +482 -0
- package/skills/pyopenms/references/signal_processing.md +433 -0
- package/skills/pysam/SKILL.md +263 -0
- package/skills/pysam/references/alignment_files.md +280 -0
- package/skills/pysam/references/common_workflows.md +520 -0
- package/skills/pysam/references/sequence_files.md +407 -0
- package/skills/pysam/references/variant_files.md +365 -0
- package/skills/pytdc/SKILL.md +458 -0
- package/skills/pytdc/references/datasets.md +246 -0
- package/skills/pytdc/references/oracles.md +400 -0
- package/skills/pytdc/references/utilities.md +684 -0
- package/skills/pytdc/scripts/benchmark_evaluation.py +327 -0
- package/skills/pytdc/scripts/load_and_split_data.py +214 -0
- package/skills/pytdc/scripts/molecular_generation.py +404 -0
- package/skills/pytorch-lightning/SKILL.md +172 -0
- package/skills/pytorch-lightning/references/best_practices.md +724 -0
- package/skills/pytorch-lightning/references/callbacks.md +564 -0
- package/skills/pytorch-lightning/references/data_module.md +565 -0
- package/skills/pytorch-lightning/references/distributed_training.md +643 -0
- package/skills/pytorch-lightning/references/lightning_module.md +487 -0
- package/skills/pytorch-lightning/references/logging.md +654 -0
- package/skills/pytorch-lightning/references/trainer.md +641 -0
- package/skills/pytorch-lightning/scripts/quick_trainer_setup.py +454 -0
- package/skills/pytorch-lightning/scripts/template_datamodule.py +328 -0
- package/skills/pytorch-lightning/scripts/template_lightning_module.py +219 -0
- package/skills/pyzotero/SKILL.md +111 -0
- package/skills/pyzotero/references/authentication.md +90 -0
- package/skills/pyzotero/references/cli.md +100 -0
- package/skills/pyzotero/references/collections.md +113 -0
- package/skills/pyzotero/references/error-handling.md +103 -0
- package/skills/pyzotero/references/exports.md +102 -0
- package/skills/pyzotero/references/files-attachments.md +97 -0
- package/skills/pyzotero/references/full-text.md +68 -0
- package/skills/pyzotero/references/pagination.md +79 -0
- package/skills/pyzotero/references/read-api.md +137 -0
- package/skills/pyzotero/references/saved-searches.md +77 -0
- package/skills/pyzotero/references/search-params.md +90 -0
- package/skills/pyzotero/references/tags.md +87 -0
- package/skills/pyzotero/references/write-api.md +123 -0
- package/skills/qiskit/SKILL.md +273 -0
- package/skills/qiskit/references/algorithms.md +607 -0
- package/skills/qiskit/references/backends.md +433 -0
- package/skills/qiskit/references/circuits.md +197 -0
- package/skills/qiskit/references/patterns.md +533 -0
- package/skills/qiskit/references/primitives.md +277 -0
- package/skills/qiskit/references/setup.md +99 -0
- package/skills/qiskit/references/transpilation.md +286 -0
- package/skills/qiskit/references/visualization.md +415 -0
- package/skills/qutip/SKILL.md +316 -0
- package/skills/qutip/references/advanced.md +555 -0
- package/skills/qutip/references/analysis.md +523 -0
- package/skills/qutip/references/core_concepts.md +293 -0
- package/skills/qutip/references/time_evolution.md +348 -0
- package/skills/qutip/references/visualization.md +431 -0
- package/skills/rdkit/SKILL.md +778 -0
- package/skills/rdkit/references/api_reference.md +432 -0
- package/skills/rdkit/references/descriptors_reference.md +595 -0
- package/skills/rdkit/references/smarts_patterns.md +668 -0
- package/skills/rdkit/scripts/molecular_properties.py +243 -0
- package/skills/rdkit/scripts/similarity_search.py +297 -0
- package/skills/rdkit/scripts/substructure_filter.py +386 -0
- package/skills/reactome-database/SKILL.md +276 -0
- package/skills/reactome-database/references/api_reference.md +465 -0
- package/skills/reactome-database/scripts/reactome_query.py +286 -0
- package/skills/replication/SKILL.md +14 -0
- package/skills/research-grants/SKILL.md +955 -0
- package/skills/research-grants/assets/budget_justification_template.md +453 -0
- package/skills/research-grants/assets/nih_specific_aims_template.md +166 -0
- package/skills/research-grants/assets/nsf_project_summary_template.md +92 -0
- package/skills/research-grants/references/README.md +285 -0
- package/skills/research-grants/references/broader_impacts.md +392 -0
- package/skills/research-grants/references/darpa_guidelines.md +636 -0
- package/skills/research-grants/references/doe_guidelines.md +586 -0
- package/skills/research-grants/references/nih_guidelines.md +851 -0
- package/skills/research-grants/references/nsf_guidelines.md +570 -0
- package/skills/research-grants/references/nstc_guidelines.md +733 -0
- package/skills/research-grants/references/specific_aims_guide.md +458 -0
- package/skills/research-lookup/README.md +156 -0
- package/skills/research-lookup/SKILL.md +413 -0
- package/skills/research-lookup/examples.py +174 -0
- package/skills/research-lookup/lookup.py +187 -0
- package/skills/research-lookup/research_lookup.py +566 -0
- package/skills/research-lookup/scripts/research_lookup.py +566 -0
- package/skills/rowan/SKILL.md +427 -0
- package/skills/rowan/references/api_reference.md +413 -0
- package/skills/rowan/references/molecule_handling.md +429 -0
- package/skills/rowan/references/proteins_and_organization.md +499 -0
- package/skills/rowan/references/rdkit_native.md +438 -0
- package/skills/rowan/references/results_interpretation.md +481 -0
- package/skills/rowan/references/workflow_types.md +591 -0
- package/skills/runpod-compute/SKILL.md +48 -0
- package/skills/scanpy/SKILL.md +384 -0
- package/skills/scanpy/assets/analysis_template.py +295 -0
- package/skills/scanpy/references/api_reference.md +251 -0
- package/skills/scanpy/references/plotting_guide.md +352 -0
- package/skills/scanpy/references/standard_workflow.md +206 -0
- package/skills/scanpy/scripts/qc_analysis.py +200 -0
- package/skills/scholar-evaluation/SKILL.md +298 -0
- package/skills/scholar-evaluation/references/evaluation_framework.md +663 -0
- package/skills/scholar-evaluation/scripts/calculate_scores.py +378 -0
- package/skills/scientific-brainstorming/SKILL.md +189 -0
- package/skills/scientific-brainstorming/references/brainstorming_methods.md +326 -0
- package/skills/scientific-critical-thinking/SKILL.md +570 -0
- package/skills/scientific-critical-thinking/references/common_biases.md +364 -0
- package/skills/scientific-critical-thinking/references/evidence_hierarchy.md +484 -0
- package/skills/scientific-critical-thinking/references/experimental_design.md +496 -0
- package/skills/scientific-critical-thinking/references/logical_fallacies.md +478 -0
- package/skills/scientific-critical-thinking/references/scientific_method.md +169 -0
- package/skills/scientific-critical-thinking/references/statistical_pitfalls.md +506 -0
- package/skills/scientific-schematics/SKILL.md +619 -0
- package/skills/scientific-schematics/references/QUICK_REFERENCE.md +207 -0
- package/skills/scientific-schematics/references/README.md +327 -0
- package/skills/scientific-schematics/references/best_practices.md +560 -0
- package/skills/scientific-schematics/scripts/example_usage.sh +89 -0
- package/skills/scientific-schematics/scripts/generate_schematic.py +139 -0
- package/skills/scientific-schematics/scripts/generate_schematic_ai.py +844 -0
- package/skills/scientific-slides/SKILL.md +1154 -0
- package/skills/scientific-slides/assets/beamer_template_conference.tex +407 -0
- package/skills/scientific-slides/assets/beamer_template_defense.tex +906 -0
- package/skills/scientific-slides/assets/beamer_template_seminar.tex +870 -0
- package/skills/scientific-slides/assets/powerpoint_design_guide.md +662 -0
- package/skills/scientific-slides/assets/timing_guidelines.md +597 -0
- package/skills/scientific-slides/references/beamer_guide.md +1019 -0
- package/skills/scientific-slides/references/data_visualization_slides.md +708 -0
- package/skills/scientific-slides/references/presentation_structure.md +642 -0
- package/skills/scientific-slides/references/slide_design_principles.md +849 -0
- package/skills/scientific-slides/references/talk_types_guide.md +687 -0
- package/skills/scientific-slides/references/visual_review_workflow.md +775 -0
- package/skills/scientific-slides/scripts/generate_slide_image.py +140 -0
- package/skills/scientific-slides/scripts/generate_slide_image_ai.py +763 -0
- package/skills/scientific-slides/scripts/pdf_to_images.py +221 -0
- package/skills/scientific-slides/scripts/slides_to_pdf.py +235 -0
- package/skills/scientific-slides/scripts/validate_presentation.py +403 -0
- package/skills/scientific-visualization/SKILL.md +777 -0
- package/skills/scientific-visualization/assets/color_palettes.py +197 -0
- package/skills/scientific-visualization/assets/nature.mplstyle +63 -0
- package/skills/scientific-visualization/assets/presentation.mplstyle +61 -0
- package/skills/scientific-visualization/assets/publication.mplstyle +68 -0
- package/skills/scientific-visualization/references/color_palettes.md +348 -0
- package/skills/scientific-visualization/references/journal_requirements.md +320 -0
- package/skills/scientific-visualization/references/matplotlib_examples.md +620 -0
- package/skills/scientific-visualization/references/publication_guidelines.md +205 -0
- package/skills/scientific-visualization/scripts/figure_export.py +343 -0
- package/skills/scientific-visualization/scripts/style_presets.py +416 -0
- package/skills/scientific-workflows/SKILL.md +1684 -0
- package/skills/scientific-writing/SKILL.md +718 -0
- package/skills/scientific-writing/assets/REPORT_FORMATTING_GUIDE.md +574 -0
- package/skills/scientific-writing/assets/scientific_report.sty +606 -0
- package/skills/scientific-writing/assets/scientific_report_template.tex +449 -0
- package/skills/scientific-writing/references/citation_styles.md +720 -0
- package/skills/scientific-writing/references/figures_tables.md +806 -0
- package/skills/scientific-writing/references/imrad_structure.md +686 -0
- package/skills/scientific-writing/references/professional_report_formatting.md +664 -0
- package/skills/scientific-writing/references/reporting_guidelines.md +748 -0
- package/skills/scientific-writing/references/writing_principles.md +824 -0
- package/skills/scikit-bio/SKILL.md +435 -0
- package/skills/scikit-bio/references/api_reference.md +749 -0
- package/skills/scikit-learn/SKILL.md +519 -0
- package/skills/scikit-learn/references/model_evaluation.md +592 -0
- package/skills/scikit-learn/references/pipelines_and_composition.md +612 -0
- package/skills/scikit-learn/references/preprocessing.md +606 -0
- package/skills/scikit-learn/references/quick_reference.md +433 -0
- package/skills/scikit-learn/references/supervised_learning.md +378 -0
- package/skills/scikit-learn/references/unsupervised_learning.md +505 -0
- package/skills/scikit-learn/scripts/classification_pipeline.py +257 -0
- package/skills/scikit-learn/scripts/clustering_analysis.py +386 -0
- package/skills/scikit-survival/SKILL.md +397 -0
- package/skills/scikit-survival/references/competing-risks.md +397 -0
- package/skills/scikit-survival/references/cox-models.md +182 -0
- package/skills/scikit-survival/references/data-handling.md +494 -0
- package/skills/scikit-survival/references/ensemble-models.md +327 -0
- package/skills/scikit-survival/references/evaluation-metrics.md +378 -0
- package/skills/scikit-survival/references/svm-models.md +411 -0
- package/skills/scvelo/SKILL.md +321 -0
- package/skills/scvelo/references/velocity_models.md +168 -0
- package/skills/scvelo/scripts/rna_velocity_workflow.py +232 -0
- package/skills/scvi-tools/SKILL.md +188 -0
- package/skills/scvi-tools/references/differential-expression.md +581 -0
- package/skills/scvi-tools/references/models-atac-seq.md +321 -0
- package/skills/scvi-tools/references/models-multimodal.md +367 -0
- package/skills/scvi-tools/references/models-scrna-seq.md +330 -0
- package/skills/scvi-tools/references/models-spatial.md +438 -0
- package/skills/scvi-tools/references/models-specialized.md +408 -0
- package/skills/scvi-tools/references/theoretical-foundations.md +438 -0
- package/skills/scvi-tools/references/workflows.md +546 -0
- package/skills/seaborn/SKILL.md +671 -0
- package/skills/seaborn/references/examples.md +822 -0
- package/skills/seaborn/references/function_reference.md +770 -0
- package/skills/seaborn/references/objects_interface.md +964 -0
- package/skills/semantic-scholar/SKILL.md +123 -0
- package/skills/session-log/SKILL.md +10 -0
- package/skills/session-search/SKILL.md +26 -0
- package/skills/setup/SKILL.md +216 -0
- package/skills/shap/SKILL.md +564 -0
- package/skills/shap/references/explainers.md +339 -0
- package/skills/shap/references/plots.md +507 -0
- package/skills/shap/references/theory.md +449 -0
- package/skills/shap/references/workflows.md +605 -0
- package/skills/simpy/SKILL.md +427 -0
- package/skills/simpy/references/events.md +374 -0
- package/skills/simpy/references/monitoring.md +475 -0
- package/skills/simpy/references/process-interaction.md +424 -0
- package/skills/simpy/references/real-time.md +395 -0
- package/skills/simpy/references/resources.md +275 -0
- package/skills/simpy/scripts/basic_simulation_template.py +193 -0
- package/skills/simpy/scripts/resource_monitor.py +345 -0
- package/skills/source-comparison/SKILL.md +12 -0
- package/skills/stable-baselines3/SKILL.md +297 -0
- package/skills/stable-baselines3/references/algorithms.md +333 -0
- package/skills/stable-baselines3/references/callbacks.md +556 -0
- package/skills/stable-baselines3/references/custom_environments.md +526 -0
- package/skills/stable-baselines3/references/vectorized_envs.md +568 -0
- package/skills/stable-baselines3/scripts/custom_env_template.py +314 -0
- package/skills/stable-baselines3/scripts/evaluate_agent.py +245 -0
- package/skills/stable-baselines3/scripts/train_rl_agent.py +165 -0
- package/skills/statistical-analysis/SKILL.md +630 -0
- package/skills/statistical-analysis/references/assumptions_and_diagnostics.md +369 -0
- package/skills/statistical-analysis/references/bayesian_statistics.md +661 -0
- package/skills/statistical-analysis/references/effect_sizes_and_power.md +581 -0
- package/skills/statistical-analysis/references/reporting_standards.md +469 -0
- package/skills/statistical-analysis/references/test_selection_guide.md +129 -0
- package/skills/statistical-analysis/scripts/assumption_checks.py +539 -0
- package/skills/statsmodels/SKILL.md +612 -0
- package/skills/statsmodels/references/discrete_choice.md +669 -0
- package/skills/statsmodels/references/glm.md +619 -0
- package/skills/statsmodels/references/linear_models.md +447 -0
- package/skills/statsmodels/references/stats_diagnostics.md +859 -0
- package/skills/statsmodels/references/time_series.md +716 -0
- package/skills/string-database/SKILL.md +532 -0
- package/skills/string-database/references/string_reference.md +455 -0
- package/skills/string-database/scripts/string_api.py +369 -0
- package/skills/sympy/SKILL.md +498 -0
- package/skills/sympy/references/advanced-topics.md +635 -0
- package/skills/sympy/references/code-generation-printing.md +599 -0
- package/skills/sympy/references/core-capabilities.md +348 -0
- package/skills/sympy/references/matrices-linear-algebra.md +526 -0
- package/skills/sympy/references/physics-mechanics.md +592 -0
- package/skills/tiledbvcf/SKILL.md +459 -0
- package/skills/timesfm-forecasting/SKILL.md +785 -0
- package/skills/timesfm-forecasting/examples/anomaly-detection/detect_anomalies.py +524 -0
- package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.json +448 -0
- package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.png +0 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/demo_covariates.py +568 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_data.png +0 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_metadata.json +59 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/sales_with_covariates.csv +109 -0
- package/skills/timesfm-forecasting/examples/global-temperature/README.md +178 -0
- package/skills/timesfm-forecasting/examples/global-temperature/generate_animation_data.py +147 -0
- package/skills/timesfm-forecasting/examples/global-temperature/generate_gif.py +248 -0
- package/skills/timesfm-forecasting/examples/global-temperature/generate_html.py +544 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/animation_data.json +5441 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_animation.gif +0 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.csv +13 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.json +188 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_visualization.png +0 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/interactive_forecast.html +5939 -0
- package/skills/timesfm-forecasting/examples/global-temperature/run_example.sh +53 -0
- package/skills/timesfm-forecasting/examples/global-temperature/run_forecast.py +167 -0
- package/skills/timesfm-forecasting/examples/global-temperature/temperature_anomaly.csv +37 -0
- package/skills/timesfm-forecasting/examples/global-temperature/visualize_forecast.py +123 -0
- package/skills/timesfm-forecasting/references/api_reference.md +231 -0
- package/skills/timesfm-forecasting/references/data_preparation.md +272 -0
- package/skills/timesfm-forecasting/references/system_requirements.md +201 -0
- package/skills/timesfm-forecasting/scripts/check_system.py +520 -0
- package/skills/timesfm-forecasting/scripts/forecast_csv.py +269 -0
- package/skills/torch-geometric/SKILL.md +674 -0
- package/skills/torch-geometric/references/datasets_reference.md +574 -0
- package/skills/torch-geometric/references/layers_reference.md +485 -0
- package/skills/torch-geometric/references/transforms_reference.md +679 -0
- package/skills/torch-geometric/scripts/benchmark_model.py +309 -0
- package/skills/torch-geometric/scripts/create_gnn_template.py +529 -0
- package/skills/torch-geometric/scripts/visualize_graph.py +313 -0
- package/skills/torchdrug/SKILL.md +448 -0
- package/skills/torchdrug/references/core_concepts.md +565 -0
- package/skills/torchdrug/references/datasets.md +380 -0
- package/skills/torchdrug/references/knowledge_graphs.md +320 -0
- package/skills/torchdrug/references/models_architectures.md +541 -0
- package/skills/torchdrug/references/molecular_generation.md +352 -0
- package/skills/torchdrug/references/molecular_property_prediction.md +169 -0
- package/skills/torchdrug/references/protein_modeling.md +272 -0
- package/skills/torchdrug/references/retrosynthesis.md +436 -0
- package/skills/transformers/SKILL.md +162 -0
- package/skills/transformers/references/generation.md +467 -0
- package/skills/transformers/references/models.md +361 -0
- package/skills/transformers/references/pipelines.md +335 -0
- package/skills/transformers/references/tokenizers.md +447 -0
- package/skills/transformers/references/training.md +500 -0
- package/skills/treatment-plans/SKILL.md +1580 -0
- package/skills/treatment-plans/assets/STYLING_QUICK_REFERENCE.md +185 -0
- package/skills/treatment-plans/assets/chronic_disease_management_plan.tex +665 -0
- package/skills/treatment-plans/assets/general_medical_treatment_plan.tex +547 -0
- package/skills/treatment-plans/assets/medical_treatment_plan.sty +222 -0
- package/skills/treatment-plans/assets/mental_health_treatment_plan.tex +774 -0
- package/skills/treatment-plans/assets/one_page_treatment_plan.tex +193 -0
- package/skills/treatment-plans/assets/pain_management_plan.tex +799 -0
- package/skills/treatment-plans/assets/perioperative_care_plan.tex +753 -0
- package/skills/treatment-plans/assets/quality_checklist.md +471 -0
- package/skills/treatment-plans/assets/rehabilitation_treatment_plan.tex +756 -0
- package/skills/treatment-plans/references/README.md +488 -0
- package/skills/treatment-plans/references/goal_setting_frameworks.md +411 -0
- package/skills/treatment-plans/references/intervention_guidelines.md +507 -0
- package/skills/treatment-plans/references/regulatory_compliance.md +476 -0
- package/skills/treatment-plans/references/specialty_specific_guidelines.md +655 -0
- package/skills/treatment-plans/references/treatment_plan_standards.md +485 -0
- package/skills/treatment-plans/scripts/check_completeness.py +318 -0
- package/skills/treatment-plans/scripts/generate_template.py +244 -0
- package/skills/treatment-plans/scripts/timeline_generator.py +369 -0
- package/skills/treatment-plans/scripts/validate_treatment_plan.py +367 -0
- package/skills/umap-learn/SKILL.md +477 -0
- package/skills/umap-learn/references/api_reference.md +532 -0
- package/skills/uniprot-database/SKILL.md +193 -0
- package/skills/uniprot-database/references/api_examples.md +413 -0
- package/skills/uniprot-database/references/api_fields.md +275 -0
- package/skills/uniprot-database/references/id_mapping_databases.md +285 -0
- package/skills/uniprot-database/references/query_syntax.md +256 -0
- package/skills/uniprot-database/scripts/uniprot_client.py +341 -0
- package/skills/usfiscaldata/SKILL.md +163 -0
- package/skills/usfiscaldata/references/api-basics.md +86 -0
- package/skills/usfiscaldata/references/datasets-debt.md +163 -0
- package/skills/usfiscaldata/references/datasets-fiscal.md +196 -0
- package/skills/usfiscaldata/references/datasets-interest-rates.md +182 -0
- package/skills/usfiscaldata/references/datasets-securities.md +216 -0
- package/skills/usfiscaldata/references/examples.md +258 -0
- package/skills/usfiscaldata/references/parameters.md +155 -0
- package/skills/usfiscaldata/references/response-format.md +176 -0
- package/skills/uspto-database/SKILL.md +605 -0
- package/skills/uspto-database/references/additional_apis.md +394 -0
- package/skills/uspto-database/references/patentsearch_api.md +266 -0
- package/skills/uspto-database/references/peds_api.md +212 -0
- package/skills/uspto-database/references/trademark_api.md +358 -0
- package/skills/uspto-database/scripts/patent_search.py +290 -0
- package/skills/uspto-database/scripts/peds_client.py +285 -0
- package/skills/uspto-database/scripts/trademark_client.py +311 -0
- package/skills/vaex/SKILL.md +180 -0
- package/skills/vaex/references/core_dataframes.md +367 -0
- package/skills/vaex/references/data_processing.md +555 -0
- package/skills/vaex/references/io_operations.md +703 -0
- package/skills/vaex/references/machine_learning.md +728 -0
- package/skills/vaex/references/performance.md +571 -0
- package/skills/vaex/references/visualization.md +613 -0
- package/skills/venue-templates/SKILL.md +688 -0
- package/skills/venue-templates/assets/examples/cell_summary_example.md +247 -0
- package/skills/venue-templates/assets/examples/medical_structured_abstract.md +313 -0
- package/skills/venue-templates/assets/examples/nature_abstract_examples.md +213 -0
- package/skills/venue-templates/assets/examples/neurips_introduction_example.md +245 -0
- package/skills/venue-templates/assets/grants/nih_specific_aims.tex +235 -0
- package/skills/venue-templates/assets/grants/nsf_proposal_template.tex +375 -0
- package/skills/venue-templates/assets/journals/nature_article.tex +171 -0
- package/skills/venue-templates/assets/journals/neurips_article.tex +283 -0
- package/skills/venue-templates/assets/journals/plos_one.tex +317 -0
- package/skills/venue-templates/assets/posters/beamerposter_academic.tex +311 -0
- package/skills/venue-templates/references/cell_press_style.md +483 -0
- package/skills/venue-templates/references/conferences_formatting.md +564 -0
- package/skills/venue-templates/references/cs_conference_style.md +463 -0
- package/skills/venue-templates/references/grants_requirements.md +787 -0
- package/skills/venue-templates/references/journals_formatting.md +486 -0
- package/skills/venue-templates/references/medical_journal_styles.md +535 -0
- package/skills/venue-templates/references/ml_conference_style.md +556 -0
- package/skills/venue-templates/references/nature_science_style.md +405 -0
- package/skills/venue-templates/references/posters_guidelines.md +628 -0
- package/skills/venue-templates/references/reviewer_expectations.md +417 -0
- package/skills/venue-templates/references/venue_writing_styles.md +321 -0
- package/skills/venue-templates/scripts/customize_template.py +206 -0
- package/skills/venue-templates/scripts/query_template.py +260 -0
- package/skills/venue-templates/scripts/validate_format.py +255 -0
- package/skills/watch/SKILL.md +12 -0
- package/skills/what-if-oracle/SKILL.md +168 -0
- package/skills/what-if-oracle/references/scenario-templates.md +137 -0
- package/skills/writing/SKILL.md +414 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +292 -0
- package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/xlsx/scripts/office/pack.py +159 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/xlsx/scripts/office/soffice.py +183 -0
- package/skills/xlsx/scripts/office/unpack.py +132 -0
- package/skills/xlsx/scripts/office/validate.py +111 -0
- package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/skills/xlsx/scripts/recalc.py +184 -0
- package/skills/zarr-python/SKILL.md +777 -0
- package/skills/zarr-python/references/api_reference.md +515 -0
- package/skills/zinc-database/SKILL.md +402 -0
- package/skills/zinc-database/references/api_reference.md +692 -0
|
@@ -0,0 +1,1290 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
AI-powered infographic generation using Nano Banana Pro.
|
|
4
|
+
|
|
5
|
+
This script uses a smart iterative refinement approach:
|
|
6
|
+
1. (Optional) Research phase - gather facts and data using Perplexity Sonar
|
|
7
|
+
2. Generate initial infographic with Nano Banana Pro
|
|
8
|
+
3. AI quality review using Gemini 3 Pro for infographic critique
|
|
9
|
+
4. Only regenerate if quality is below threshold for document type
|
|
10
|
+
5. Repeat until quality meets standards (max iterations)
|
|
11
|
+
|
|
12
|
+
Requirements:
|
|
13
|
+
- OPENROUTER_API_KEY environment variable
|
|
14
|
+
- requests library
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
python generate_infographic_ai.py "5 benefits of exercise" -o benefits.png --type list
|
|
18
|
+
python generate_infographic_ai.py "Global AI market size" -o ai_market.png --type statistical --research
|
|
19
|
+
python generate_infographic_ai.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import base64
|
|
24
|
+
import json
|
|
25
|
+
import os
|
|
26
|
+
import re
|
|
27
|
+
import sys
|
|
28
|
+
import time
|
|
29
|
+
from pathlib import Path
|
|
30
|
+
from typing import Optional, Dict, Any, List, Tuple
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
import requests
|
|
34
|
+
except ImportError:
|
|
35
|
+
print("Error: requests library not found. Install with: pip install requests")
|
|
36
|
+
sys.exit(1)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _load_env_file():
|
|
40
|
+
"""Load .env file from current directory, parent directories, or package directory."""
|
|
41
|
+
try:
|
|
42
|
+
from dotenv import load_dotenv
|
|
43
|
+
except ImportError:
|
|
44
|
+
return False
|
|
45
|
+
|
|
46
|
+
# Try current working directory first
|
|
47
|
+
env_path = Path.cwd() / ".env"
|
|
48
|
+
if env_path.exists():
|
|
49
|
+
load_dotenv(dotenv_path=env_path, override=False)
|
|
50
|
+
return True
|
|
51
|
+
|
|
52
|
+
# Try parent directories (up to 5 levels)
|
|
53
|
+
cwd = Path.cwd()
|
|
54
|
+
for _ in range(5):
|
|
55
|
+
env_path = cwd / ".env"
|
|
56
|
+
if env_path.exists():
|
|
57
|
+
load_dotenv(dotenv_path=env_path, override=False)
|
|
58
|
+
return True
|
|
59
|
+
cwd = cwd.parent
|
|
60
|
+
if cwd == cwd.parent:
|
|
61
|
+
break
|
|
62
|
+
|
|
63
|
+
# Try the package's parent directory
|
|
64
|
+
script_dir = Path(__file__).resolve().parent
|
|
65
|
+
for _ in range(5):
|
|
66
|
+
env_path = script_dir / ".env"
|
|
67
|
+
if env_path.exists():
|
|
68
|
+
load_dotenv(dotenv_path=env_path, override=False)
|
|
69
|
+
return True
|
|
70
|
+
script_dir = script_dir.parent
|
|
71
|
+
if script_dir == script_dir.parent:
|
|
72
|
+
break
|
|
73
|
+
|
|
74
|
+
return False
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# Infographic type configurations with detailed prompting
|
|
78
|
+
INFOGRAPHIC_TYPES = {
|
|
79
|
+
"statistical": {
|
|
80
|
+
"name": "Statistical/Data-Driven",
|
|
81
|
+
"guidelines": """
|
|
82
|
+
STATISTICAL INFOGRAPHIC REQUIREMENTS:
|
|
83
|
+
- Large, bold numbers that are immediately readable
|
|
84
|
+
- Clear data visualization (bar charts, pie charts, or donut charts)
|
|
85
|
+
- Data callouts with context (e.g., "15% increase")
|
|
86
|
+
- Trend indicators (arrows, growth symbols)
|
|
87
|
+
- Legend if multiple data series
|
|
88
|
+
- Source attribution area at bottom
|
|
89
|
+
- Clean grid or alignment for data elements
|
|
90
|
+
"""
|
|
91
|
+
},
|
|
92
|
+
"timeline": {
|
|
93
|
+
"name": "Timeline/Chronological",
|
|
94
|
+
"guidelines": """
|
|
95
|
+
TIMELINE INFOGRAPHIC REQUIREMENTS:
|
|
96
|
+
- Clear chronological flow (horizontal or vertical)
|
|
97
|
+
- Prominent date/year markers
|
|
98
|
+
- Connecting line or path between events
|
|
99
|
+
- Event nodes (circles, icons, or markers)
|
|
100
|
+
- Brief event descriptions
|
|
101
|
+
- Consistent spacing between events
|
|
102
|
+
- Visual progression indicating time direction
|
|
103
|
+
- Start and end points clearly marked
|
|
104
|
+
"""
|
|
105
|
+
},
|
|
106
|
+
"process": {
|
|
107
|
+
"name": "Process/How-To",
|
|
108
|
+
"guidelines": """
|
|
109
|
+
PROCESS INFOGRAPHIC REQUIREMENTS:
|
|
110
|
+
- Numbered steps (1, 2, 3, etc.) clearly visible
|
|
111
|
+
- Directional arrows between steps
|
|
112
|
+
- Action-oriented icons for each step
|
|
113
|
+
- Brief action text for each step
|
|
114
|
+
- Clear start and end indicators
|
|
115
|
+
- Logical flow direction (top-to-bottom or left-to-right)
|
|
116
|
+
- Visual connection between sequential steps
|
|
117
|
+
"""
|
|
118
|
+
},
|
|
119
|
+
"comparison": {
|
|
120
|
+
"name": "Comparison",
|
|
121
|
+
"guidelines": """
|
|
122
|
+
COMPARISON INFOGRAPHIC REQUIREMENTS:
|
|
123
|
+
- Symmetrical side-by-side layout
|
|
124
|
+
- Clear headers for each option being compared
|
|
125
|
+
- Matching rows/categories for fair comparison
|
|
126
|
+
- Visual indicators (checkmarks, X marks, ratings)
|
|
127
|
+
- Balanced visual weight on both sides
|
|
128
|
+
- Color differentiation between options
|
|
129
|
+
- Summary or verdict section if applicable
|
|
130
|
+
"""
|
|
131
|
+
},
|
|
132
|
+
"list": {
|
|
133
|
+
"name": "List/Informational",
|
|
134
|
+
"guidelines": """
|
|
135
|
+
LIST INFOGRAPHIC REQUIREMENTS:
|
|
136
|
+
- Large, clear numbers or bullet points
|
|
137
|
+
- Icons representing each list item
|
|
138
|
+
- Brief, scannable text descriptions
|
|
139
|
+
- Consistent visual treatment for all items
|
|
140
|
+
- Clear hierarchy (title, items, details)
|
|
141
|
+
- Adequate spacing between items
|
|
142
|
+
- Visual variety to prevent monotony
|
|
143
|
+
"""
|
|
144
|
+
},
|
|
145
|
+
"geographic": {
|
|
146
|
+
"name": "Geographic/Map-Based",
|
|
147
|
+
"guidelines": """
|
|
148
|
+
GEOGRAPHIC INFOGRAPHIC REQUIREMENTS:
|
|
149
|
+
- Accurate map representation
|
|
150
|
+
- Color-coded regions based on data
|
|
151
|
+
- Clear legend explaining color scale
|
|
152
|
+
- Data callouts for key regions
|
|
153
|
+
- Region labels where space permits
|
|
154
|
+
- Scale or context indicator
|
|
155
|
+
- Clean cartographic style
|
|
156
|
+
"""
|
|
157
|
+
},
|
|
158
|
+
"hierarchical": {
|
|
159
|
+
"name": "Hierarchical/Pyramid",
|
|
160
|
+
"guidelines": """
|
|
161
|
+
HIERARCHICAL INFOGRAPHIC REQUIREMENTS:
|
|
162
|
+
- Clear pyramid or tree structure
|
|
163
|
+
- Distinct levels with visual separation
|
|
164
|
+
- Size progression (larger at base, smaller at top)
|
|
165
|
+
- Labels for each tier
|
|
166
|
+
- Color gradient or distinct colors per level
|
|
167
|
+
- Clear top-to-bottom or bottom-to-top hierarchy
|
|
168
|
+
- Balanced, centered composition
|
|
169
|
+
"""
|
|
170
|
+
},
|
|
171
|
+
"anatomical": {
|
|
172
|
+
"name": "Anatomical/Visual Metaphor",
|
|
173
|
+
"guidelines": """
|
|
174
|
+
ANATOMICAL INFOGRAPHIC REQUIREMENTS:
|
|
175
|
+
- Central metaphor image (body, tree, machine, etc.)
|
|
176
|
+
- Labeled components with callout lines
|
|
177
|
+
- Clear connection between labels and parts
|
|
178
|
+
- Explanatory text for each labeled part
|
|
179
|
+
- Consistent callout style throughout
|
|
180
|
+
- Educational, diagram-like appearance
|
|
181
|
+
"""
|
|
182
|
+
},
|
|
183
|
+
"resume": {
|
|
184
|
+
"name": "Resume/Professional",
|
|
185
|
+
"guidelines": """
|
|
186
|
+
RESUME INFOGRAPHIC REQUIREMENTS:
|
|
187
|
+
- Professional photo/avatar placeholder area
|
|
188
|
+
- Skill visualization (bars, charts, ratings)
|
|
189
|
+
- Experience timeline or list
|
|
190
|
+
- Contact information section with icons
|
|
191
|
+
- Achievement or certification badges
|
|
192
|
+
- Clean, professional layout
|
|
193
|
+
- Personal branding colors
|
|
194
|
+
"""
|
|
195
|
+
},
|
|
196
|
+
"social": {
|
|
197
|
+
"name": "Social Media",
|
|
198
|
+
"guidelines": """
|
|
199
|
+
SOCIAL MEDIA INFOGRAPHIC REQUIREMENTS:
|
|
200
|
+
- Bold, attention-grabbing headline
|
|
201
|
+
- Large, impactful central statistic or visual
|
|
202
|
+
- Minimal text, maximum visual impact
|
|
203
|
+
- Platform-appropriate format (square for Instagram)
|
|
204
|
+
- Vibrant, eye-catching colors
|
|
205
|
+
- Call-to-action element
|
|
206
|
+
- Brand/logo placement area
|
|
207
|
+
"""
|
|
208
|
+
},
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
# Industry style configurations
|
|
212
|
+
STYLE_PRESETS = {
|
|
213
|
+
"corporate": {
|
|
214
|
+
"name": "Corporate/Business",
|
|
215
|
+
"colors": "navy blue (#1E3A5F), steel blue (#4A90A4), gold (#F5A623) accents",
|
|
216
|
+
"description": "Clean, professional, minimal design with structured layout",
|
|
217
|
+
},
|
|
218
|
+
"healthcare": {
|
|
219
|
+
"name": "Healthcare/Medical",
|
|
220
|
+
"colors": "medical blue (#0077B6), cyan (#00B4D8), light cyan (#90E0EF)",
|
|
221
|
+
"description": "Trust-inducing, clinical, clean design",
|
|
222
|
+
},
|
|
223
|
+
"technology": {
|
|
224
|
+
"name": "Technology/Data",
|
|
225
|
+
"colors": "tech blue (#2563EB), slate gray (#475569), violet (#7C3AED) accents",
|
|
226
|
+
"description": "Modern, innovative, futuristic design",
|
|
227
|
+
},
|
|
228
|
+
"nature": {
|
|
229
|
+
"name": "Nature/Environmental",
|
|
230
|
+
"colors": "forest green (#2D6A4F), mint (#95D5B2), earth brown (#8B4513)",
|
|
231
|
+
"description": "Organic, natural, earth-toned design",
|
|
232
|
+
},
|
|
233
|
+
"education": {
|
|
234
|
+
"name": "Education/Academic",
|
|
235
|
+
"colors": "academic blue (#3D5A80), light blue (#98C1D9), coral (#EE6C4D) accents",
|
|
236
|
+
"description": "Friendly, approachable, educational design",
|
|
237
|
+
},
|
|
238
|
+
"marketing": {
|
|
239
|
+
"name": "Marketing/Creative",
|
|
240
|
+
"colors": "coral (#FF6B6B), teal (#4ECDC4), yellow (#FFE66D)",
|
|
241
|
+
"description": "Bold, vibrant, eye-catching design",
|
|
242
|
+
},
|
|
243
|
+
"finance": {
|
|
244
|
+
"name": "Finance/Investment",
|
|
245
|
+
"colors": "navy (#14213D), gold (#FCA311), green (#2ECC71) for positive",
|
|
246
|
+
"description": "Conservative, trustworthy, professional design",
|
|
247
|
+
},
|
|
248
|
+
"nonprofit": {
|
|
249
|
+
"name": "Nonprofit/Cause",
|
|
250
|
+
"colors": "warm orange (#E07A5F), sage green (#81B29A), sand (#F2CC8F)",
|
|
251
|
+
"description": "Warm, human-centered, impactful design",
|
|
252
|
+
},
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# Colorblind-safe palette options
|
|
256
|
+
PALETTE_PRESETS = {
|
|
257
|
+
"wong": {
|
|
258
|
+
"name": "Wong's Palette",
|
|
259
|
+
"colors": "orange (#E69F00), sky blue (#56B4E9), bluish green (#009E73), blue (#0072B2), vermillion (#D55E00)",
|
|
260
|
+
},
|
|
261
|
+
"ibm": {
|
|
262
|
+
"name": "IBM Colorblind-Safe",
|
|
263
|
+
"colors": "ultramarine (#648FFF), indigo (#785EF0), magenta (#DC267F), orange (#FE6100), gold (#FFB000)",
|
|
264
|
+
},
|
|
265
|
+
"tol": {
|
|
266
|
+
"name": "Tol's Qualitative",
|
|
267
|
+
"colors": "indigo (#332288), cyan (#88CCEE), teal (#44AA99), green (#117733), sand (#DDCC77), rose (#CC6677)",
|
|
268
|
+
},
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class InfographicGenerator:
|
|
273
|
+
"""Generate infographics using AI with smart iterative refinement.
|
|
274
|
+
|
|
275
|
+
Uses Gemini 3 Pro for quality review to determine if regeneration is needed.
|
|
276
|
+
Multiple passes only occur if the generated infographic doesn't meet the
|
|
277
|
+
quality threshold for the target document type.
|
|
278
|
+
"""
|
|
279
|
+
|
|
280
|
+
# Quality thresholds by document type (score out of 10)
|
|
281
|
+
QUALITY_THRESHOLDS = {
|
|
282
|
+
"marketing": 8.5, # Marketing materials - must be compelling
|
|
283
|
+
"report": 8.0, # Business reports - professional quality
|
|
284
|
+
"presentation": 7.5, # Slides/talks - clear and engaging
|
|
285
|
+
"social": 7.0, # Social media - eye-catching
|
|
286
|
+
"internal": 7.0, # Internal use - good quality
|
|
287
|
+
"draft": 6.5, # Draft/working - acceptable
|
|
288
|
+
"default": 7.5, # Default threshold
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
# Base infographic design guidelines
|
|
292
|
+
INFOGRAPHIC_GUIDELINES = """
|
|
293
|
+
Create a high-quality professional infographic with these requirements:
|
|
294
|
+
|
|
295
|
+
VISUAL QUALITY:
|
|
296
|
+
- Clean white or light solid color background (no busy textures)
|
|
297
|
+
- High contrast for readability
|
|
298
|
+
- Professional, polished appearance
|
|
299
|
+
- Sharp, clear graphics and text
|
|
300
|
+
- Adequate spacing to prevent crowding
|
|
301
|
+
- Balanced composition
|
|
302
|
+
|
|
303
|
+
TYPOGRAPHY:
|
|
304
|
+
- Bold, attention-grabbing headline
|
|
305
|
+
- Clear, readable sans-serif fonts
|
|
306
|
+
- Minimum 12pt font size for body text
|
|
307
|
+
- Larger text for key statistics and headlines
|
|
308
|
+
- Consistent font hierarchy throughout
|
|
309
|
+
- No overlapping text
|
|
310
|
+
|
|
311
|
+
LAYOUT:
|
|
312
|
+
- Clear visual hierarchy (most important info largest/first)
|
|
313
|
+
- Logical reading flow (top-to-bottom or left-to-right)
|
|
314
|
+
- 60% visual elements, 40% text (approximately)
|
|
315
|
+
- Adequate white space between sections
|
|
316
|
+
- Balanced left-right composition
|
|
317
|
+
- Clear section divisions
|
|
318
|
+
|
|
319
|
+
DATA VISUALIZATION:
|
|
320
|
+
- Large, bold numbers for key statistics
|
|
321
|
+
- Clear, accurate charts and graphs
|
|
322
|
+
- Labeled axes and data points
|
|
323
|
+
- Legend where needed
|
|
324
|
+
- Icons that clearly represent concepts
|
|
325
|
+
|
|
326
|
+
ACCESSIBILITY:
|
|
327
|
+
- Colorblind-friendly color choices
|
|
328
|
+
- High contrast between text and background
|
|
329
|
+
- Shapes and labels, not just colors, to convey meaning
|
|
330
|
+
- Works in grayscale
|
|
331
|
+
|
|
332
|
+
IMPORTANT - NO META CONTENT:
|
|
333
|
+
- Do NOT include the prompt, instructions, or metadata in the image
|
|
334
|
+
- Do NOT include layout descriptions like "left panel", "right panel"
|
|
335
|
+
- Do NOT include font or color specifications
|
|
336
|
+
- Only include the actual infographic content
|
|
337
|
+
"""
|
|
338
|
+
|
|
339
|
+
def __init__(self, api_key: Optional[str] = None, verbose: bool = False):
|
|
340
|
+
"""Initialize the generator."""
|
|
341
|
+
self.api_key = api_key or os.getenv("OPENROUTER_API_KEY")
|
|
342
|
+
|
|
343
|
+
if not self.api_key:
|
|
344
|
+
_load_env_file()
|
|
345
|
+
self.api_key = os.getenv("OPENROUTER_API_KEY")
|
|
346
|
+
|
|
347
|
+
if not self.api_key:
|
|
348
|
+
raise ValueError(
|
|
349
|
+
"OPENROUTER_API_KEY not found. Please either:\n"
|
|
350
|
+
" 1. Set the OPENROUTER_API_KEY environment variable\n"
|
|
351
|
+
" 2. Add OPENROUTER_API_KEY to your .env file\n"
|
|
352
|
+
" 3. Pass api_key parameter to the constructor\n"
|
|
353
|
+
"Get your API key from: https://openrouter.ai/keys"
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
self.verbose = verbose
|
|
357
|
+
self._last_error = None
|
|
358
|
+
self.base_url = "https://openrouter.ai/api/v1"
|
|
359
|
+
# Nano Banana Pro for image generation
|
|
360
|
+
self.image_model = "google/gemini-3-pro-image-preview"
|
|
361
|
+
# Gemini 3 Pro for quality review
|
|
362
|
+
self.review_model = "google/gemini-3-pro"
|
|
363
|
+
|
|
364
|
+
def _log(self, message: str):
|
|
365
|
+
"""Log message if verbose mode is enabled."""
|
|
366
|
+
if self.verbose:
|
|
367
|
+
print(f"[{time.strftime('%H:%M:%S')}] {message}")
|
|
368
|
+
|
|
369
|
+
# ========== RESEARCH METHODS ==========
|
|
370
|
+
|
|
371
|
+
def research_topic(self, topic: str, infographic_type: Optional[str] = None) -> Dict[str, Any]:
|
|
372
|
+
"""
|
|
373
|
+
Research a topic using Perplexity Sonar Pro to gather facts and data.
|
|
374
|
+
|
|
375
|
+
Args:
|
|
376
|
+
topic: The topic to research
|
|
377
|
+
infographic_type: Type of infographic to tailor the research
|
|
378
|
+
|
|
379
|
+
Returns:
|
|
380
|
+
Dictionary with research results including facts, statistics, and sources
|
|
381
|
+
"""
|
|
382
|
+
self._log(f"Researching topic: {topic}")
|
|
383
|
+
|
|
384
|
+
# Build research query based on infographic type
|
|
385
|
+
type_context = ""
|
|
386
|
+
if infographic_type:
|
|
387
|
+
if infographic_type == "statistical":
|
|
388
|
+
type_context = "Focus on statistics, numbers, percentages, and quantitative data."
|
|
389
|
+
elif infographic_type == "timeline":
|
|
390
|
+
type_context = "Focus on key dates, milestones, and chronological events."
|
|
391
|
+
elif infographic_type == "process":
|
|
392
|
+
type_context = "Focus on steps, procedures, and sequential information."
|
|
393
|
+
elif infographic_type == "comparison":
|
|
394
|
+
type_context = "Focus on comparing different options, pros/cons, and differences."
|
|
395
|
+
elif infographic_type == "list":
|
|
396
|
+
type_context = "Focus on key points, tips, facts, and organized information."
|
|
397
|
+
elif infographic_type == "geographic":
|
|
398
|
+
type_context = "Focus on regional data, location-based statistics, and geographic distribution."
|
|
399
|
+
elif infographic_type == "hierarchical":
|
|
400
|
+
type_context = "Focus on levels, rankings, and hierarchical relationships."
|
|
401
|
+
|
|
402
|
+
research_prompt = f"""You are a research assistant gathering information for an infographic.
|
|
403
|
+
|
|
404
|
+
TOPIC: {topic}
|
|
405
|
+
|
|
406
|
+
{type_context}
|
|
407
|
+
|
|
408
|
+
Please provide:
|
|
409
|
+
1. KEY FACTS: 5-8 key facts or statistics about this topic (with specific numbers where possible)
|
|
410
|
+
2. CONTEXT: Brief background context (2-3 sentences)
|
|
411
|
+
3. SOURCES: Mention any major sources or studies
|
|
412
|
+
4. DATA POINTS: Any specific data points that would make good visualizations
|
|
413
|
+
|
|
414
|
+
Format your response as structured data that can be easily incorporated into an infographic.
|
|
415
|
+
Be specific with numbers, percentages, and dates.
|
|
416
|
+
Prioritize recent information (2023-2026).
|
|
417
|
+
Include citation hints where possible."""
|
|
418
|
+
|
|
419
|
+
messages = [
|
|
420
|
+
{
|
|
421
|
+
"role": "system",
|
|
422
|
+
"content": "You are an expert research assistant. Provide accurate, well-sourced information formatted for infographic creation. Always include specific numbers, dates, and statistics."
|
|
423
|
+
},
|
|
424
|
+
{"role": "user", "content": research_prompt}
|
|
425
|
+
]
|
|
426
|
+
|
|
427
|
+
try:
|
|
428
|
+
# Use Perplexity Sonar Pro for research
|
|
429
|
+
research_model = "perplexity/sonar-pro"
|
|
430
|
+
|
|
431
|
+
headers = {
|
|
432
|
+
"Authorization": f"Bearer {self.api_key}",
|
|
433
|
+
"Content-Type": "application/json",
|
|
434
|
+
"HTTP-Referer": "https://github.com/scientific-writer",
|
|
435
|
+
"X-Title": "Infographic Research"
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
payload = {
|
|
439
|
+
"model": research_model,
|
|
440
|
+
"messages": messages,
|
|
441
|
+
"max_tokens": 2000,
|
|
442
|
+
"temperature": 0.1,
|
|
443
|
+
"search_mode": "academic",
|
|
444
|
+
"search_context_size": "high"
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
response = requests.post(
|
|
448
|
+
f"{self.base_url}/chat/completions",
|
|
449
|
+
headers=headers,
|
|
450
|
+
json=payload,
|
|
451
|
+
timeout=60
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
if response.status_code != 200:
|
|
455
|
+
self._log(f"Research request failed: {response.status_code}")
|
|
456
|
+
return {"success": False, "error": f"API error: {response.status_code}"}
|
|
457
|
+
|
|
458
|
+
result = response.json()
|
|
459
|
+
|
|
460
|
+
if "choices" in result and len(result["choices"]) > 0:
|
|
461
|
+
content = result["choices"][0].get("message", {}).get("content", "")
|
|
462
|
+
|
|
463
|
+
# Extract any sources from the response
|
|
464
|
+
sources = result.get("search_results", [])
|
|
465
|
+
|
|
466
|
+
self._log(f"Research complete: {len(content)} chars")
|
|
467
|
+
|
|
468
|
+
return {
|
|
469
|
+
"success": True,
|
|
470
|
+
"content": content,
|
|
471
|
+
"sources": sources,
|
|
472
|
+
"model": research_model
|
|
473
|
+
}
|
|
474
|
+
else:
|
|
475
|
+
return {"success": False, "error": "No response from research model"}
|
|
476
|
+
|
|
477
|
+
except Exception as e:
|
|
478
|
+
self._log(f"Research failed: {str(e)}")
|
|
479
|
+
return {"success": False, "error": str(e)}
|
|
480
|
+
|
|
481
|
+
def web_search(self, query: str) -> Dict[str, Any]:
|
|
482
|
+
"""
|
|
483
|
+
Perform a quick web search for current information.
|
|
484
|
+
|
|
485
|
+
Args:
|
|
486
|
+
query: Search query
|
|
487
|
+
|
|
488
|
+
Returns:
|
|
489
|
+
Dictionary with search results
|
|
490
|
+
"""
|
|
491
|
+
self._log(f"Web search: {query}")
|
|
492
|
+
|
|
493
|
+
search_prompt = f"""Search for current information about: {query}
|
|
494
|
+
|
|
495
|
+
Provide:
|
|
496
|
+
1. The most relevant and recent facts
|
|
497
|
+
2. Any statistics or numbers
|
|
498
|
+
3. Key dates if applicable
|
|
499
|
+
4. Brief source attribution
|
|
500
|
+
|
|
501
|
+
Be concise and factual. Focus on information useful for an infographic."""
|
|
502
|
+
|
|
503
|
+
messages = [
|
|
504
|
+
{
|
|
505
|
+
"role": "system",
|
|
506
|
+
"content": "You are a web search assistant. Provide accurate, current information with sources."
|
|
507
|
+
},
|
|
508
|
+
{"role": "user", "content": search_prompt}
|
|
509
|
+
]
|
|
510
|
+
|
|
511
|
+
try:
|
|
512
|
+
# Use Perplexity Sonar for web search
|
|
513
|
+
search_model = "perplexity/sonar-pro"
|
|
514
|
+
|
|
515
|
+
headers = {
|
|
516
|
+
"Authorization": f"Bearer {self.api_key}",
|
|
517
|
+
"Content-Type": "application/json",
|
|
518
|
+
"HTTP-Referer": "https://github.com/scientific-writer",
|
|
519
|
+
"X-Title": "Infographic Web Search"
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
payload = {
|
|
523
|
+
"model": search_model,
|
|
524
|
+
"messages": messages,
|
|
525
|
+
"max_tokens": 1000,
|
|
526
|
+
"temperature": 0.1
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
response = requests.post(
|
|
530
|
+
f"{self.base_url}/chat/completions",
|
|
531
|
+
headers=headers,
|
|
532
|
+
json=payload,
|
|
533
|
+
timeout=30
|
|
534
|
+
)
|
|
535
|
+
|
|
536
|
+
if response.status_code != 200:
|
|
537
|
+
return {"success": False, "error": f"API error: {response.status_code}"}
|
|
538
|
+
|
|
539
|
+
result = response.json()
|
|
540
|
+
|
|
541
|
+
if "choices" in result and len(result["choices"]) > 0:
|
|
542
|
+
content = result["choices"][0].get("message", {}).get("content", "")
|
|
543
|
+
return {
|
|
544
|
+
"success": True,
|
|
545
|
+
"content": content,
|
|
546
|
+
"sources": result.get("search_results", [])
|
|
547
|
+
}
|
|
548
|
+
else:
|
|
549
|
+
return {"success": False, "error": "No response from search"}
|
|
550
|
+
|
|
551
|
+
except Exception as e:
|
|
552
|
+
self._log(f"Web search failed: {str(e)}")
|
|
553
|
+
return {"success": False, "error": str(e)}
|
|
554
|
+
|
|
555
|
+
def _enhance_prompt_with_research(self, user_prompt: str, research_data: Dict[str, Any]) -> str:
|
|
556
|
+
"""
|
|
557
|
+
Enhance the user prompt with researched information.
|
|
558
|
+
|
|
559
|
+
Args:
|
|
560
|
+
user_prompt: Original user prompt
|
|
561
|
+
research_data: Research results dictionary
|
|
562
|
+
|
|
563
|
+
Returns:
|
|
564
|
+
Enhanced prompt with research data
|
|
565
|
+
"""
|
|
566
|
+
if not research_data.get("success") or not research_data.get("content"):
|
|
567
|
+
return user_prompt
|
|
568
|
+
|
|
569
|
+
enhanced = f"""{user_prompt}
|
|
570
|
+
|
|
571
|
+
RESEARCHED DATA AND FACTS (use these in the infographic):
|
|
572
|
+
{research_data['content']}
|
|
573
|
+
|
|
574
|
+
Use the above researched facts, statistics, and data points to create an accurate, informative infographic.
|
|
575
|
+
Incorporate specific numbers, percentages, and dates from the research."""
|
|
576
|
+
|
|
577
|
+
return enhanced
|
|
578
|
+
|
|
579
|
+
# ========== END RESEARCH METHODS ==========
|
|
580
|
+
|
|
581
|
+
def _make_request(self, model: str, messages: List[Dict[str, Any]],
|
|
582
|
+
modalities: Optional[List[str]] = None) -> Dict[str, Any]:
|
|
583
|
+
"""Make a request to OpenRouter API."""
|
|
584
|
+
headers = {
|
|
585
|
+
"Authorization": f"Bearer {self.api_key}",
|
|
586
|
+
"Content-Type": "application/json",
|
|
587
|
+
"HTTP-Referer": "https://github.com/scientific-writer",
|
|
588
|
+
"X-Title": "Infographic Generator"
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
payload = {
|
|
592
|
+
"model": model,
|
|
593
|
+
"messages": messages
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if modalities:
|
|
597
|
+
payload["modalities"] = modalities
|
|
598
|
+
|
|
599
|
+
self._log(f"Making request to {model}...")
|
|
600
|
+
|
|
601
|
+
try:
|
|
602
|
+
response = requests.post(
|
|
603
|
+
f"{self.base_url}/chat/completions",
|
|
604
|
+
headers=headers,
|
|
605
|
+
json=payload,
|
|
606
|
+
timeout=120
|
|
607
|
+
)
|
|
608
|
+
|
|
609
|
+
try:
|
|
610
|
+
response_json = response.json()
|
|
611
|
+
except json.JSONDecodeError:
|
|
612
|
+
response_json = {"raw_text": response.text[:500]}
|
|
613
|
+
|
|
614
|
+
if response.status_code != 200:
|
|
615
|
+
error_detail = response_json.get("error", response_json)
|
|
616
|
+
self._log(f"HTTP {response.status_code}: {error_detail}")
|
|
617
|
+
raise RuntimeError(f"API request failed (HTTP {response.status_code}): {error_detail}")
|
|
618
|
+
|
|
619
|
+
return response_json
|
|
620
|
+
except requests.exceptions.Timeout:
|
|
621
|
+
raise RuntimeError("API request timed out after 120 seconds")
|
|
622
|
+
except requests.exceptions.RequestException as e:
|
|
623
|
+
raise RuntimeError(f"API request failed: {str(e)}")
|
|
624
|
+
|
|
625
|
+
def _extract_image_from_response(self, response: Dict[str, Any]) -> Optional[bytes]:
|
|
626
|
+
"""Extract base64-encoded image from API response."""
|
|
627
|
+
try:
|
|
628
|
+
choices = response.get("choices", [])
|
|
629
|
+
if not choices:
|
|
630
|
+
self._log("No choices in response")
|
|
631
|
+
return None
|
|
632
|
+
|
|
633
|
+
message = choices[0].get("message", {})
|
|
634
|
+
|
|
635
|
+
# Nano Banana Pro returns images in 'images' field
|
|
636
|
+
images = message.get("images", [])
|
|
637
|
+
if images and len(images) > 0:
|
|
638
|
+
self._log(f"Found {len(images)} image(s) in 'images' field")
|
|
639
|
+
|
|
640
|
+
first_image = images[0]
|
|
641
|
+
if isinstance(first_image, dict):
|
|
642
|
+
if first_image.get("type") == "image_url":
|
|
643
|
+
url = first_image.get("image_url", {})
|
|
644
|
+
if isinstance(url, dict):
|
|
645
|
+
url = url.get("url", "")
|
|
646
|
+
|
|
647
|
+
if url and url.startswith("data:image"):
|
|
648
|
+
if "," in url:
|
|
649
|
+
base64_str = url.split(",", 1)[1]
|
|
650
|
+
base64_str = base64_str.replace('\n', '').replace('\r', '').replace(' ', '')
|
|
651
|
+
self._log(f"Extracted base64 data (length: {len(base64_str)})")
|
|
652
|
+
return base64.b64decode(base64_str)
|
|
653
|
+
|
|
654
|
+
# Fallback: check content field
|
|
655
|
+
content = message.get("content", "")
|
|
656
|
+
|
|
657
|
+
if isinstance(content, str) and "data:image" in content:
|
|
658
|
+
import re
|
|
659
|
+
match = re.search(r'data:image/[^;]+;base64,([A-Za-z0-9+/=\n\r]+)', content, re.DOTALL)
|
|
660
|
+
if match:
|
|
661
|
+
base64_str = match.group(1).replace('\n', '').replace('\r', '').replace(' ', '')
|
|
662
|
+
self._log(f"Found image in content field (length: {len(base64_str)})")
|
|
663
|
+
return base64.b64decode(base64_str)
|
|
664
|
+
|
|
665
|
+
if isinstance(content, list):
|
|
666
|
+
for i, block in enumerate(content):
|
|
667
|
+
if isinstance(block, dict) and block.get("type") == "image_url":
|
|
668
|
+
url = block.get("image_url", {})
|
|
669
|
+
if isinstance(url, dict):
|
|
670
|
+
url = url.get("url", "")
|
|
671
|
+
if url and url.startswith("data:image") and "," in url:
|
|
672
|
+
base64_str = url.split(",", 1)[1].replace('\n', '').replace('\r', '').replace(' ', '')
|
|
673
|
+
self._log(f"Found image in content block {i}")
|
|
674
|
+
return base64.b64decode(base64_str)
|
|
675
|
+
|
|
676
|
+
self._log("No image data found in response")
|
|
677
|
+
return None
|
|
678
|
+
|
|
679
|
+
except Exception as e:
|
|
680
|
+
self._log(f"Error extracting image: {str(e)}")
|
|
681
|
+
return None
|
|
682
|
+
|
|
683
|
+
def _image_to_base64(self, image_path: str) -> str:
|
|
684
|
+
"""Convert image file to base64 data URL."""
|
|
685
|
+
with open(image_path, "rb") as f:
|
|
686
|
+
image_data = f.read()
|
|
687
|
+
|
|
688
|
+
ext = Path(image_path).suffix.lower()
|
|
689
|
+
mime_type = {
|
|
690
|
+
".png": "image/png",
|
|
691
|
+
".jpg": "image/jpeg",
|
|
692
|
+
".jpeg": "image/jpeg",
|
|
693
|
+
".gif": "image/gif",
|
|
694
|
+
".webp": "image/webp"
|
|
695
|
+
}.get(ext, "image/png")
|
|
696
|
+
|
|
697
|
+
base64_data = base64.b64encode(image_data).decode("utf-8")
|
|
698
|
+
return f"data:{mime_type};base64,{base64_data}"
|
|
699
|
+
|
|
700
|
+
def _build_generation_prompt(self, user_prompt: str,
|
|
701
|
+
infographic_type: Optional[str] = None,
|
|
702
|
+
style: Optional[str] = None,
|
|
703
|
+
palette: Optional[str] = None,
|
|
704
|
+
background: str = "white") -> str:
|
|
705
|
+
"""Build the full generation prompt with all enhancements."""
|
|
706
|
+
parts = [self.INFOGRAPHIC_GUIDELINES]
|
|
707
|
+
|
|
708
|
+
# Add type-specific guidelines
|
|
709
|
+
if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
|
|
710
|
+
type_config = INFOGRAPHIC_TYPES[infographic_type]
|
|
711
|
+
parts.append(f"\nINFOGRAPHIC TYPE: {type_config['name']}")
|
|
712
|
+
parts.append(type_config['guidelines'])
|
|
713
|
+
|
|
714
|
+
# Add style preset
|
|
715
|
+
if style and style in STYLE_PRESETS:
|
|
716
|
+
style_config = STYLE_PRESETS[style]
|
|
717
|
+
parts.append(f"\nSTYLE: {style_config['name']}")
|
|
718
|
+
parts.append(f"Colors: {style_config['colors']}")
|
|
719
|
+
parts.append(f"Design: {style_config['description']}")
|
|
720
|
+
|
|
721
|
+
# Add colorblind-safe palette
|
|
722
|
+
if palette and palette in PALETTE_PRESETS:
|
|
723
|
+
palette_config = PALETTE_PRESETS[palette]
|
|
724
|
+
parts.append(f"\nCOLORBLIND-SAFE PALETTE: {palette_config['name']}")
|
|
725
|
+
parts.append(f"Use these colors: {palette_config['colors']}")
|
|
726
|
+
|
|
727
|
+
# Add user request
|
|
728
|
+
parts.append(f"\nUSER REQUEST: {user_prompt}")
|
|
729
|
+
|
|
730
|
+
# Add background
|
|
731
|
+
parts.append(f"\nBackground: {background} background")
|
|
732
|
+
|
|
733
|
+
# Final instruction
|
|
734
|
+
parts.append("\nGenerate a professional, publication-quality infographic that meets all the guidelines above.")
|
|
735
|
+
|
|
736
|
+
return "\n".join(parts)
|
|
737
|
+
|
|
738
|
+
def generate_image(self, prompt: str) -> Optional[bytes]:
|
|
739
|
+
"""Generate an image using Nano Banana Pro."""
|
|
740
|
+
self._last_error = None
|
|
741
|
+
|
|
742
|
+
messages = [
|
|
743
|
+
{
|
|
744
|
+
"role": "user",
|
|
745
|
+
"content": prompt
|
|
746
|
+
}
|
|
747
|
+
]
|
|
748
|
+
|
|
749
|
+
try:
|
|
750
|
+
response = self._make_request(
|
|
751
|
+
model=self.image_model,
|
|
752
|
+
messages=messages,
|
|
753
|
+
modalities=["image", "text"]
|
|
754
|
+
)
|
|
755
|
+
|
|
756
|
+
if self.verbose:
|
|
757
|
+
self._log(f"Response keys: {response.keys()}")
|
|
758
|
+
if "error" in response:
|
|
759
|
+
self._log(f"API Error: {response['error']}")
|
|
760
|
+
|
|
761
|
+
if "error" in response:
|
|
762
|
+
error_msg = response["error"]
|
|
763
|
+
if isinstance(error_msg, dict):
|
|
764
|
+
error_msg = error_msg.get("message", str(error_msg))
|
|
765
|
+
self._last_error = f"API Error: {error_msg}"
|
|
766
|
+
print(f"✗ {self._last_error}")
|
|
767
|
+
return None
|
|
768
|
+
|
|
769
|
+
image_data = self._extract_image_from_response(response)
|
|
770
|
+
if image_data:
|
|
771
|
+
self._log(f"✓ Generated image ({len(image_data)} bytes)")
|
|
772
|
+
else:
|
|
773
|
+
self._last_error = "No image data in API response"
|
|
774
|
+
self._log(f"✗ {self._last_error}")
|
|
775
|
+
|
|
776
|
+
return image_data
|
|
777
|
+
except RuntimeError as e:
|
|
778
|
+
self._last_error = str(e)
|
|
779
|
+
self._log(f"✗ Generation failed: {self._last_error}")
|
|
780
|
+
return None
|
|
781
|
+
except Exception as e:
|
|
782
|
+
self._last_error = f"Unexpected error: {str(e)}"
|
|
783
|
+
self._log(f"✗ Generation failed: {self._last_error}")
|
|
784
|
+
return None
|
|
785
|
+
|
|
786
|
+
def review_image(self, image_path: str, original_prompt: str,
|
|
787
|
+
infographic_type: Optional[str],
|
|
788
|
+
iteration: int, doc_type: str = "default",
|
|
789
|
+
max_iterations: int = 3) -> Tuple[str, float, bool]:
|
|
790
|
+
"""
|
|
791
|
+
Review generated infographic using Gemini 3 Pro for quality analysis.
|
|
792
|
+
|
|
793
|
+
Evaluates the infographic on multiple criteria specific to good
|
|
794
|
+
infographic design and determines if regeneration is needed.
|
|
795
|
+
"""
|
|
796
|
+
image_data_url = self._image_to_base64(image_path)
|
|
797
|
+
|
|
798
|
+
threshold = self.QUALITY_THRESHOLDS.get(doc_type.lower(),
|
|
799
|
+
self.QUALITY_THRESHOLDS["default"])
|
|
800
|
+
|
|
801
|
+
type_name = "general"
|
|
802
|
+
if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
|
|
803
|
+
type_name = INFOGRAPHIC_TYPES[infographic_type]["name"]
|
|
804
|
+
|
|
805
|
+
review_prompt = f"""You are an expert infographic designer reviewing a generated infographic for quality.
|
|
806
|
+
|
|
807
|
+
ORIGINAL REQUEST: {original_prompt}
|
|
808
|
+
|
|
809
|
+
INFOGRAPHIC TYPE: {type_name}
|
|
810
|
+
QUALITY THRESHOLD: {threshold}/10
|
|
811
|
+
ITERATION: {iteration}/{max_iterations}
|
|
812
|
+
|
|
813
|
+
Carefully evaluate this infographic on these criteria:
|
|
814
|
+
|
|
815
|
+
1. **Visual Hierarchy & Layout** (0-2 points)
|
|
816
|
+
- Clear visual hierarchy (most important elements prominent)
|
|
817
|
+
- Logical reading flow
|
|
818
|
+
- Balanced composition
|
|
819
|
+
- Adequate white space
|
|
820
|
+
|
|
821
|
+
2. **Typography & Readability** (0-2 points)
|
|
822
|
+
- Text is readable and appropriately sized
|
|
823
|
+
- Headlines are bold and attention-grabbing
|
|
824
|
+
- No overlapping or cramped text
|
|
825
|
+
- Consistent font usage
|
|
826
|
+
|
|
827
|
+
3. **Data Visualization** (0-2 points)
|
|
828
|
+
- Numbers and statistics are prominent
|
|
829
|
+
- Charts/icons are clear and accurate
|
|
830
|
+
- Data is easy to understand at a glance
|
|
831
|
+
- Labels are present where needed
|
|
832
|
+
|
|
833
|
+
4. **Color & Accessibility** (0-2 points)
|
|
834
|
+
- Colors are harmonious and professional
|
|
835
|
+
- Sufficient contrast for readability
|
|
836
|
+
- Works for colorblind viewers
|
|
837
|
+
- Colors support the content hierarchy
|
|
838
|
+
|
|
839
|
+
5. **Overall Impact & Professionalism** (0-2 points)
|
|
840
|
+
- Looks professional and polished
|
|
841
|
+
- Engaging and visually appealing
|
|
842
|
+
- Free of visual bugs or artifacts
|
|
843
|
+
- Achieves its communication goal
|
|
844
|
+
|
|
845
|
+
RESPOND IN THIS EXACT FORMAT:
|
|
846
|
+
SCORE: [total score 0-10]
|
|
847
|
+
|
|
848
|
+
STRENGTHS:
|
|
849
|
+
- [strength 1]
|
|
850
|
+
- [strength 2]
|
|
851
|
+
|
|
852
|
+
ISSUES:
|
|
853
|
+
- [issue 1 if any]
|
|
854
|
+
- [issue 2 if any]
|
|
855
|
+
|
|
856
|
+
SPECIFIC_IMPROVEMENTS:
|
|
857
|
+
- [specific improvement 1]
|
|
858
|
+
- [specific improvement 2]
|
|
859
|
+
|
|
860
|
+
VERDICT: [ACCEPTABLE or NEEDS_IMPROVEMENT]
|
|
861
|
+
|
|
862
|
+
If score >= {threshold}, the infographic is ACCEPTABLE.
|
|
863
|
+
If score < {threshold}, mark as NEEDS_IMPROVEMENT with specific suggestions."""
|
|
864
|
+
|
|
865
|
+
messages = [
|
|
866
|
+
{
|
|
867
|
+
"role": "user",
|
|
868
|
+
"content": [
|
|
869
|
+
{
|
|
870
|
+
"type": "text",
|
|
871
|
+
"text": review_prompt
|
|
872
|
+
},
|
|
873
|
+
{
|
|
874
|
+
"type": "image_url",
|
|
875
|
+
"image_url": {
|
|
876
|
+
"url": image_data_url
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
]
|
|
880
|
+
}
|
|
881
|
+
]
|
|
882
|
+
|
|
883
|
+
try:
|
|
884
|
+
response = self._make_request(
|
|
885
|
+
model=self.review_model,
|
|
886
|
+
messages=messages
|
|
887
|
+
)
|
|
888
|
+
|
|
889
|
+
choices = response.get("choices", [])
|
|
890
|
+
if not choices:
|
|
891
|
+
return "Image generated successfully", 7.5, False
|
|
892
|
+
|
|
893
|
+
message = choices[0].get("message", {})
|
|
894
|
+
content = message.get("content", "")
|
|
895
|
+
|
|
896
|
+
reasoning = message.get("reasoning", "")
|
|
897
|
+
if reasoning and not content:
|
|
898
|
+
content = reasoning
|
|
899
|
+
|
|
900
|
+
if isinstance(content, list):
|
|
901
|
+
text_parts = []
|
|
902
|
+
for block in content:
|
|
903
|
+
if isinstance(block, dict) and block.get("type") == "text":
|
|
904
|
+
text_parts.append(block.get("text", ""))
|
|
905
|
+
content = "\n".join(text_parts)
|
|
906
|
+
|
|
907
|
+
# Extract score
|
|
908
|
+
score = 7.5
|
|
909
|
+
import re
|
|
910
|
+
|
|
911
|
+
score_match = re.search(r'SCORE:\s*(\d+(?:\.\d+)?)', content, re.IGNORECASE)
|
|
912
|
+
if score_match:
|
|
913
|
+
score = float(score_match.group(1))
|
|
914
|
+
else:
|
|
915
|
+
score_match = re.search(r'(?:score|rating|quality)[:\s]+(\d+(?:\.\d+)?)\s*(?:/\s*10)?', content, re.IGNORECASE)
|
|
916
|
+
if score_match:
|
|
917
|
+
score = float(score_match.group(1))
|
|
918
|
+
|
|
919
|
+
# Determine if improvement is needed
|
|
920
|
+
needs_improvement = False
|
|
921
|
+
if "NEEDS_IMPROVEMENT" in content.upper():
|
|
922
|
+
needs_improvement = True
|
|
923
|
+
elif score < threshold:
|
|
924
|
+
needs_improvement = True
|
|
925
|
+
|
|
926
|
+
self._log(f"✓ Review complete (Score: {score}/10, Threshold: {threshold}/10)")
|
|
927
|
+
self._log(f" Verdict: {'Needs improvement' if needs_improvement else 'Acceptable'}")
|
|
928
|
+
|
|
929
|
+
return (content if content else "Image generated successfully",
|
|
930
|
+
score,
|
|
931
|
+
needs_improvement)
|
|
932
|
+
except Exception as e:
|
|
933
|
+
self._log(f"Review skipped: {str(e)}")
|
|
934
|
+
return "Image generated successfully (review skipped)", 7.5, False
|
|
935
|
+
|
|
936
|
+
def improve_prompt(self, original_prompt: str, critique: str,
|
|
937
|
+
infographic_type: Optional[str],
|
|
938
|
+
style: Optional[str],
|
|
939
|
+
palette: Optional[str],
|
|
940
|
+
background: str,
|
|
941
|
+
iteration: int) -> str:
|
|
942
|
+
"""Improve the generation prompt based on critique."""
|
|
943
|
+
|
|
944
|
+
parts = [self.INFOGRAPHIC_GUIDELINES]
|
|
945
|
+
|
|
946
|
+
# Add type-specific guidelines
|
|
947
|
+
if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
|
|
948
|
+
type_config = INFOGRAPHIC_TYPES[infographic_type]
|
|
949
|
+
parts.append(f"\nINFOGRAPHIC TYPE: {type_config['name']}")
|
|
950
|
+
parts.append(type_config['guidelines'])
|
|
951
|
+
|
|
952
|
+
# Add style preset
|
|
953
|
+
if style and style in STYLE_PRESETS:
|
|
954
|
+
style_config = STYLE_PRESETS[style]
|
|
955
|
+
parts.append(f"\nSTYLE: {style_config['name']}")
|
|
956
|
+
parts.append(f"Colors: {style_config['colors']}")
|
|
957
|
+
parts.append(f"Design: {style_config['description']}")
|
|
958
|
+
|
|
959
|
+
# Add palette
|
|
960
|
+
if palette and palette in PALETTE_PRESETS:
|
|
961
|
+
palette_config = PALETTE_PRESETS[palette]
|
|
962
|
+
parts.append(f"\nCOLORBLIND-SAFE PALETTE: {palette_config['name']}")
|
|
963
|
+
parts.append(f"Use these colors: {palette_config['colors']}")
|
|
964
|
+
|
|
965
|
+
# Add original request
|
|
966
|
+
parts.append(f"\nUSER REQUEST: {original_prompt}")
|
|
967
|
+
parts.append(f"\nBackground: {background} background")
|
|
968
|
+
|
|
969
|
+
# Add improvement instructions
|
|
970
|
+
parts.append(f"""
|
|
971
|
+
ITERATION {iteration}: Based on previous review, address these specific improvements:
|
|
972
|
+
{critique}
|
|
973
|
+
|
|
974
|
+
Generate an improved version that:
|
|
975
|
+
1. Fixes ALL the issues mentioned in the review
|
|
976
|
+
2. Maintains the requested infographic type and style
|
|
977
|
+
3. Ensures professional, publication-ready quality
|
|
978
|
+
4. Has no visual bugs, overlapping elements, or readability issues
|
|
979
|
+
""")
|
|
980
|
+
|
|
981
|
+
return "\n".join(parts)
|
|
982
|
+
|
|
983
|
+
def generate_iterative(self, user_prompt: str, output_path: str,
|
|
984
|
+
infographic_type: Optional[str] = None,
|
|
985
|
+
style: Optional[str] = None,
|
|
986
|
+
palette: Optional[str] = None,
|
|
987
|
+
background: str = "white",
|
|
988
|
+
iterations: int = 3,
|
|
989
|
+
doc_type: str = "default",
|
|
990
|
+
research: bool = False) -> Dict[str, Any]:
|
|
991
|
+
"""
|
|
992
|
+
Generate infographic with smart iterative refinement.
|
|
993
|
+
|
|
994
|
+
Only regenerates if the quality score is below the threshold.
|
|
995
|
+
|
|
996
|
+
Args:
|
|
997
|
+
user_prompt: Description of the infographic content
|
|
998
|
+
output_path: Path to save final image
|
|
999
|
+
infographic_type: Type preset (statistical, timeline, etc.)
|
|
1000
|
+
style: Industry style preset
|
|
1001
|
+
palette: Colorblind-safe palette
|
|
1002
|
+
background: Background color
|
|
1003
|
+
iterations: Maximum refinement iterations
|
|
1004
|
+
doc_type: Document type for quality threshold
|
|
1005
|
+
research: If True, research the topic first for better data
|
|
1006
|
+
"""
|
|
1007
|
+
output_path = Path(output_path)
|
|
1008
|
+
output_dir = output_path.parent
|
|
1009
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
1010
|
+
|
|
1011
|
+
base_name = output_path.stem
|
|
1012
|
+
extension = output_path.suffix or ".png"
|
|
1013
|
+
|
|
1014
|
+
threshold = self.QUALITY_THRESHOLDS.get(doc_type.lower(),
|
|
1015
|
+
self.QUALITY_THRESHOLDS["default"])
|
|
1016
|
+
|
|
1017
|
+
type_name = infographic_type if infographic_type else "general"
|
|
1018
|
+
style_name = style if style else "default"
|
|
1019
|
+
|
|
1020
|
+
results = {
|
|
1021
|
+
"user_prompt": user_prompt,
|
|
1022
|
+
"infographic_type": infographic_type,
|
|
1023
|
+
"style": style,
|
|
1024
|
+
"palette": palette,
|
|
1025
|
+
"doc_type": doc_type,
|
|
1026
|
+
"quality_threshold": threshold,
|
|
1027
|
+
"research_enabled": research,
|
|
1028
|
+
"research_data": None,
|
|
1029
|
+
"iterations": [],
|
|
1030
|
+
"final_image": None,
|
|
1031
|
+
"final_score": 0.0,
|
|
1032
|
+
"success": False,
|
|
1033
|
+
"early_stop": False,
|
|
1034
|
+
"early_stop_reason": None
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
print(f"\n{'='*60}")
|
|
1038
|
+
print(f"Generating Infographic with Nano Banana Pro")
|
|
1039
|
+
print(f"{'='*60}")
|
|
1040
|
+
print(f"Content: {user_prompt}")
|
|
1041
|
+
print(f"Type: {type_name}")
|
|
1042
|
+
print(f"Style: {style_name}")
|
|
1043
|
+
print(f"Research: {'Enabled' if research else 'Disabled'}")
|
|
1044
|
+
print(f"Quality Threshold: {threshold}/10")
|
|
1045
|
+
print(f"Max Iterations: {iterations}")
|
|
1046
|
+
print(f"Output: {output_path}")
|
|
1047
|
+
print(f"{'='*60}\n")
|
|
1048
|
+
|
|
1049
|
+
# ===== RESEARCH PHASE =====
|
|
1050
|
+
enhanced_prompt = user_prompt
|
|
1051
|
+
if research:
|
|
1052
|
+
print(f"\n[Research Phase]")
|
|
1053
|
+
print("-" * 40)
|
|
1054
|
+
print(f"Researching topic for accurate data...")
|
|
1055
|
+
|
|
1056
|
+
research_result = self.research_topic(user_prompt, infographic_type)
|
|
1057
|
+
|
|
1058
|
+
if research_result.get("success"):
|
|
1059
|
+
print(f"✓ Research complete - gathered facts and statistics")
|
|
1060
|
+
results["research_data"] = research_result
|
|
1061
|
+
|
|
1062
|
+
# Enhance the prompt with researched data
|
|
1063
|
+
enhanced_prompt = self._enhance_prompt_with_research(user_prompt, research_result)
|
|
1064
|
+
|
|
1065
|
+
# Save research data to file
|
|
1066
|
+
research_path = output_dir / f"{base_name}_research.json"
|
|
1067
|
+
with open(research_path, "w") as f:
|
|
1068
|
+
json.dump(research_result, f, indent=2)
|
|
1069
|
+
print(f"✓ Research saved: {research_path}")
|
|
1070
|
+
else:
|
|
1071
|
+
print(f"⚠ Research failed: {research_result.get('error', 'Unknown error')}")
|
|
1072
|
+
print(f" Proceeding with original prompt...")
|
|
1073
|
+
|
|
1074
|
+
# Build initial prompt (using enhanced prompt if research was done)
|
|
1075
|
+
current_prompt = self._build_generation_prompt(
|
|
1076
|
+
enhanced_prompt, infographic_type, style, palette, background
|
|
1077
|
+
)
|
|
1078
|
+
|
|
1079
|
+
for i in range(1, iterations + 1):
|
|
1080
|
+
print(f"\n[Iteration {i}/{iterations}]")
|
|
1081
|
+
print("-" * 40)
|
|
1082
|
+
|
|
1083
|
+
# Generate image
|
|
1084
|
+
print(f"Generating infographic with Nano Banana Pro...")
|
|
1085
|
+
image_data = self.generate_image(current_prompt)
|
|
1086
|
+
|
|
1087
|
+
if not image_data:
|
|
1088
|
+
error_msg = getattr(self, '_last_error', 'Generation failed')
|
|
1089
|
+
print(f"✗ Generation failed: {error_msg}")
|
|
1090
|
+
results["iterations"].append({
|
|
1091
|
+
"iteration": i,
|
|
1092
|
+
"success": False,
|
|
1093
|
+
"error": error_msg
|
|
1094
|
+
})
|
|
1095
|
+
continue
|
|
1096
|
+
|
|
1097
|
+
# Save iteration image
|
|
1098
|
+
iter_path = output_dir / f"{base_name}_v{i}{extension}"
|
|
1099
|
+
with open(iter_path, "wb") as f:
|
|
1100
|
+
f.write(image_data)
|
|
1101
|
+
print(f"✓ Saved: {iter_path}")
|
|
1102
|
+
|
|
1103
|
+
# Review image using Gemini 3 Pro
|
|
1104
|
+
print(f"Reviewing with Gemini 3 Pro...")
|
|
1105
|
+
critique, score, needs_improvement = self.review_image(
|
|
1106
|
+
str(iter_path), user_prompt, infographic_type, i, doc_type, iterations
|
|
1107
|
+
)
|
|
1108
|
+
print(f"✓ Score: {score}/10 (threshold: {threshold}/10)")
|
|
1109
|
+
|
|
1110
|
+
# Save iteration results
|
|
1111
|
+
iteration_result = {
|
|
1112
|
+
"iteration": i,
|
|
1113
|
+
"image_path": str(iter_path),
|
|
1114
|
+
"prompt_length": len(current_prompt),
|
|
1115
|
+
"critique": critique,
|
|
1116
|
+
"score": score,
|
|
1117
|
+
"needs_improvement": needs_improvement,
|
|
1118
|
+
"success": True
|
|
1119
|
+
}
|
|
1120
|
+
results["iterations"].append(iteration_result)
|
|
1121
|
+
|
|
1122
|
+
# Check if quality is acceptable
|
|
1123
|
+
if not needs_improvement:
|
|
1124
|
+
print(f"\n✓ Quality meets threshold ({score} >= {threshold})")
|
|
1125
|
+
print(f" No further iterations needed!")
|
|
1126
|
+
results["final_image"] = str(iter_path)
|
|
1127
|
+
results["final_score"] = score
|
|
1128
|
+
results["success"] = True
|
|
1129
|
+
results["early_stop"] = True
|
|
1130
|
+
results["early_stop_reason"] = f"Quality score {score} meets threshold {threshold}"
|
|
1131
|
+
break
|
|
1132
|
+
|
|
1133
|
+
# If this is the last iteration, we're done
|
|
1134
|
+
if i == iterations:
|
|
1135
|
+
print(f"\n⚠ Maximum iterations reached")
|
|
1136
|
+
results["final_image"] = str(iter_path)
|
|
1137
|
+
results["final_score"] = score
|
|
1138
|
+
results["success"] = True
|
|
1139
|
+
break
|
|
1140
|
+
|
|
1141
|
+
# Quality below threshold - improve prompt
|
|
1142
|
+
print(f"\n⚠ Quality below threshold ({score} < {threshold})")
|
|
1143
|
+
print(f"Improving prompt based on feedback...")
|
|
1144
|
+
current_prompt = self.improve_prompt(
|
|
1145
|
+
user_prompt, critique, infographic_type, style, palette, background, i + 1
|
|
1146
|
+
)
|
|
1147
|
+
|
|
1148
|
+
# Copy final version to output path
|
|
1149
|
+
if results["success"] and results["final_image"]:
|
|
1150
|
+
final_iter_path = Path(results["final_image"])
|
|
1151
|
+
if final_iter_path != output_path:
|
|
1152
|
+
import shutil
|
|
1153
|
+
shutil.copy(final_iter_path, output_path)
|
|
1154
|
+
print(f"\n✓ Final image: {output_path}")
|
|
1155
|
+
|
|
1156
|
+
# Save review log
|
|
1157
|
+
log_path = output_dir / f"{base_name}_review_log.json"
|
|
1158
|
+
with open(log_path, "w") as f:
|
|
1159
|
+
json.dump(results, f, indent=2)
|
|
1160
|
+
print(f"✓ Review log: {log_path}")
|
|
1161
|
+
|
|
1162
|
+
print(f"\n{'='*60}")
|
|
1163
|
+
print(f"Generation Complete!")
|
|
1164
|
+
print(f"Final Score: {results['final_score']}/10")
|
|
1165
|
+
if results["early_stop"]:
|
|
1166
|
+
iterations_used = len([r for r in results['iterations'] if r.get('success')])
|
|
1167
|
+
print(f"Iterations Used: {iterations_used}/{iterations} (early stop)")
|
|
1168
|
+
print(f"{'='*60}\n")
|
|
1169
|
+
|
|
1170
|
+
return results
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
def main():
|
|
1174
|
+
"""Command-line interface."""
|
|
1175
|
+
parser = argparse.ArgumentParser(
|
|
1176
|
+
description="Generate infographics using Nano Banana Pro with smart iterative refinement",
|
|
1177
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
1178
|
+
epilog="""
|
|
1179
|
+
Examples:
|
|
1180
|
+
# Generate a list infographic
|
|
1181
|
+
python generate_infographic_ai.py "5 benefits of meditation" -o benefits.png --type list
|
|
1182
|
+
|
|
1183
|
+
# Generate a timeline with corporate style
|
|
1184
|
+
python generate_infographic_ai.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
|
|
1185
|
+
|
|
1186
|
+
# Generate with colorblind-safe palette
|
|
1187
|
+
python generate_infographic_ai.py "Heart disease stats" -o stats.png --type statistical --palette wong
|
|
1188
|
+
|
|
1189
|
+
# Generate with RESEARCH for accurate data (uses Perplexity Sonar)
|
|
1190
|
+
python generate_infographic_ai.py "Global AI market 2025" -o ai_market.png --type statistical --research
|
|
1191
|
+
|
|
1192
|
+
# Verbose output
|
|
1193
|
+
python generate_infographic_ai.py "Process diagram" -o process.png --type process -v
|
|
1194
|
+
|
|
1195
|
+
Infographic Types:
|
|
1196
|
+
statistical - Data-driven with charts and numbers
|
|
1197
|
+
timeline - Chronological events
|
|
1198
|
+
process - Step-by-step instructions
|
|
1199
|
+
comparison - Side-by-side comparison
|
|
1200
|
+
list - Tips, facts, key points
|
|
1201
|
+
geographic - Map-based visualization
|
|
1202
|
+
hierarchical - Pyramid or tree structure
|
|
1203
|
+
anatomical - Visual metaphor
|
|
1204
|
+
resume - Professional/CV style
|
|
1205
|
+
social - Social media optimized
|
|
1206
|
+
|
|
1207
|
+
Style Presets:
|
|
1208
|
+
corporate, healthcare, technology, nature, education, marketing, finance, nonprofit
|
|
1209
|
+
|
|
1210
|
+
Colorblind-Safe Palettes:
|
|
1211
|
+
wong, ibm, tol
|
|
1212
|
+
|
|
1213
|
+
Document Types (quality thresholds):
|
|
1214
|
+
marketing 8.5/10 - Marketing materials
|
|
1215
|
+
report 8.0/10 - Business reports
|
|
1216
|
+
presentation 7.5/10 - Slides/talks
|
|
1217
|
+
social 7.0/10 - Social media
|
|
1218
|
+
internal 7.0/10 - Internal use
|
|
1219
|
+
draft 6.5/10 - Working drafts
|
|
1220
|
+
default 7.5/10 - General purpose
|
|
1221
|
+
|
|
1222
|
+
Environment:
|
|
1223
|
+
OPENROUTER_API_KEY OpenRouter API key (required)
|
|
1224
|
+
"""
|
|
1225
|
+
)
|
|
1226
|
+
|
|
1227
|
+
parser.add_argument("prompt", help="Description of the infographic content")
|
|
1228
|
+
parser.add_argument("-o", "--output", required=True,
|
|
1229
|
+
help="Output image path (e.g., infographic.png)")
|
|
1230
|
+
parser.add_argument("--type", "-t", choices=list(INFOGRAPHIC_TYPES.keys()),
|
|
1231
|
+
help="Infographic type preset")
|
|
1232
|
+
parser.add_argument("--style", "-s", choices=list(STYLE_PRESETS.keys()),
|
|
1233
|
+
help="Industry style preset")
|
|
1234
|
+
parser.add_argument("--palette", "-p", choices=list(PALETTE_PRESETS.keys()),
|
|
1235
|
+
help="Colorblind-safe palette")
|
|
1236
|
+
parser.add_argument("--background", "-b", default="white",
|
|
1237
|
+
help="Background color (default: white)")
|
|
1238
|
+
parser.add_argument("--iterations", type=int, default=3,
|
|
1239
|
+
help="Maximum refinement iterations (default: 3)")
|
|
1240
|
+
parser.add_argument("--doc-type", default="default",
|
|
1241
|
+
choices=["marketing", "report", "presentation", "social",
|
|
1242
|
+
"internal", "draft", "default"],
|
|
1243
|
+
help="Document type for quality threshold (default: default)")
|
|
1244
|
+
parser.add_argument("--api-key", help="OpenRouter API key (or set OPENROUTER_API_KEY)")
|
|
1245
|
+
parser.add_argument("-v", "--verbose", action="store_true",
|
|
1246
|
+
help="Verbose output")
|
|
1247
|
+
parser.add_argument("--research", "-r", action="store_true",
|
|
1248
|
+
help="Research the topic first using Perplexity Sonar for accurate data")
|
|
1249
|
+
|
|
1250
|
+
args = parser.parse_args()
|
|
1251
|
+
|
|
1252
|
+
# Check for API key
|
|
1253
|
+
api_key = args.api_key or os.getenv("OPENROUTER_API_KEY")
|
|
1254
|
+
if not api_key:
|
|
1255
|
+
print("Error: OPENROUTER_API_KEY environment variable not set")
|
|
1256
|
+
print("\nSet it with:")
|
|
1257
|
+
print(" export OPENROUTER_API_KEY='your_api_key'")
|
|
1258
|
+
print("\nOr provide via --api-key flag")
|
|
1259
|
+
sys.exit(1)
|
|
1260
|
+
|
|
1261
|
+
try:
|
|
1262
|
+
generator = InfographicGenerator(api_key=api_key, verbose=args.verbose)
|
|
1263
|
+
results = generator.generate_iterative(
|
|
1264
|
+
user_prompt=args.prompt,
|
|
1265
|
+
output_path=args.output,
|
|
1266
|
+
infographic_type=args.type,
|
|
1267
|
+
style=args.style,
|
|
1268
|
+
palette=args.palette,
|
|
1269
|
+
background=args.background,
|
|
1270
|
+
iterations=args.iterations,
|
|
1271
|
+
doc_type=args.doc_type,
|
|
1272
|
+
research=args.research
|
|
1273
|
+
)
|
|
1274
|
+
|
|
1275
|
+
if results["success"]:
|
|
1276
|
+
print(f"\n✓ Success! Infographic saved to: {args.output}")
|
|
1277
|
+
if results.get("early_stop"):
|
|
1278
|
+
iterations_used = len([r for r in results['iterations'] if r.get('success')])
|
|
1279
|
+
print(f" (Completed in {iterations_used} iteration(s) - quality threshold met)")
|
|
1280
|
+
sys.exit(0)
|
|
1281
|
+
else:
|
|
1282
|
+
print(f"\n✗ Generation failed. Check review log for details.")
|
|
1283
|
+
sys.exit(1)
|
|
1284
|
+
except Exception as e:
|
|
1285
|
+
print(f"\n✗ Error: {str(e)}")
|
|
1286
|
+
sys.exit(1)
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
if __name__ == "__main__":
|
|
1290
|
+
main()
|