mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
[pycharm] PY-70535 initiated HF cards usage collector module
GitOrigin-RevId: 142c5c696ca52268db583a8fdfce8426d912ee20
This commit is contained in:
committed by
intellij-monorepo-bot
parent
00e97f8fe5
commit
5ab36db4ae
@@ -28,5 +28,6 @@
|
||||
<orderEntry type="module" module-name="intellij.driver.sdk" />
|
||||
<orderEntry type="module" module-name="intellij.platform.ide" />
|
||||
<orderEntry type="module" module-name="intellij.platform.markdown.utils" />
|
||||
<orderEntry type="module" module-name="intellij.platform.statistics" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -11,5 +11,6 @@
|
||||
<platform.backend.documentation.psiTargetProvider id="HuggingFaceDocumentationProvider"
|
||||
implementation="com.intellij.python.community.impl.huggingFace.documentation.HuggingFaceDocumentationTargetProvider"/>
|
||||
<lang.inspectionSuppressor language="Python" implementationClass="com.intellij.python.community.impl.huggingFace.service.HuggingFaceTypoInspectionSuppressor"/>
|
||||
<statistics.counterUsagesCollector implementationClass="com.intellij.python.community.impl.huggingFace.service.HuggingFaceCardsUsageCollector"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
@@ -8,14 +8,15 @@ import com.intellij.python.community.impl.huggingFace.api.HuggingFaceURLProvider
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import java.net.URL
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.python.community.impl.huggingFace.HuggingFaceEntityKind
|
||||
import com.intellij.python.community.impl.huggingFace.service.HuggingFaceCardsUsageCollector
|
||||
|
||||
val HUGGING_FACE_ENTITY_NAME_KEY = Key.create<Boolean>("HUGGING_FACE_ENTITY_NAME_KEY")
|
||||
|
||||
|
||||
abstract class HuggingFaceEntityPsiElement(
|
||||
private val parent: PsiElement,
|
||||
private val entityName: String,
|
||||
private val getEntityLink: (String) -> URL
|
||||
private val entityName: String
|
||||
) : FakePsiElement() {
|
||||
init {
|
||||
parent.putUserData(HUGGING_FACE_ENTITY_NAME_KEY, true)
|
||||
@@ -23,16 +24,22 @@ abstract class HuggingFaceEntityPsiElement(
|
||||
|
||||
override fun getParent(): PsiElement = parent
|
||||
|
||||
override fun navigate(requestFocus: Boolean) {
|
||||
BrowserUtil.browse(getEntityLink(entityName))
|
||||
}
|
||||
|
||||
@NlsSafe
|
||||
fun stringValue(): String = entityName
|
||||
}
|
||||
|
||||
class HuggingFaceModelPsiElement(parent: PsiElement, modelName: String
|
||||
) : HuggingFaceEntityPsiElement(parent, modelName, HuggingFaceURLProvider::getModelCardLink)
|
||||
class HuggingFaceModelPsiElement(parent: PsiElement, private val modelName: String
|
||||
) : HuggingFaceEntityPsiElement(parent, modelName) {
|
||||
override fun navigate(requestFocus: Boolean) {
|
||||
HuggingFaceCardsUsageCollector.NAVIGATION_LINK_IN_EDITOR_CLICKED.log(modelName, HuggingFaceEntityKind.MODEL)
|
||||
BrowserUtil.browse(HuggingFaceURLProvider.getModelCardLink(modelName))
|
||||
}
|
||||
}
|
||||
|
||||
class HuggingFaceDatasetPsiElement(parent: PsiElement, datasetName: String
|
||||
) : HuggingFaceEntityPsiElement(parent, datasetName, HuggingFaceURLProvider::getDatasetCardLink)
|
||||
class HuggingFaceDatasetPsiElement(parent: PsiElement, private val datasetName: String
|
||||
) : HuggingFaceEntityPsiElement(parent, datasetName) {
|
||||
override fun navigate(requestFocus: Boolean) {
|
||||
HuggingFaceCardsUsageCollector.NAVIGATION_LINK_IN_EDITOR_CLICKED.log(datasetName, HuggingFaceEntityKind.DATASET)
|
||||
BrowserUtil.browse(HuggingFaceURLProvider.getDatasetCardLink(datasetName))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.intellij.python.community.impl.huggingFace.documentation
|
||||
|
||||
import com.intellij.ide.IdeBundle
|
||||
import com.intellij.model.Pointer
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.platform.backend.documentation.DocumentationResult
|
||||
import com.intellij.platform.backend.documentation.DocumentationTarget
|
||||
import com.intellij.platform.backend.presentation.TargetPresentation
|
||||
@@ -19,6 +20,7 @@ import com.intellij.python.community.impl.huggingFace.cache.HuggingFaceDatasetsC
|
||||
import com.intellij.python.community.impl.huggingFace.cache.HuggingFaceMdCacheEntry
|
||||
import com.intellij.python.community.impl.huggingFace.cache.HuggingFaceMdCardsCache
|
||||
import com.intellij.python.community.impl.huggingFace.cache.HuggingFaceModelsCache
|
||||
import com.intellij.python.community.impl.huggingFace.service.HuggingFaceCardsUsageCollector
|
||||
import com.intellij.python.community.impl.huggingFace.service.PyHuggingFaceBundle
|
||||
import com.intellij.refactoring.suggested.createSmartPointer
|
||||
import com.jetbrains.python.psi.*
|
||||
@@ -71,11 +73,12 @@ internal class HuggingFaceDocumentationTarget(private val myElement : PsiElement
|
||||
} else {
|
||||
HuggingFaceDatasetsCache.getBasicData(entityId)
|
||||
}
|
||||
|
||||
// shall we log failures?
|
||||
if (entityDataApiContent == null) { return@asyncDocumentation DocumentationResult.documentation(PyHuggingFaceBundle.message("python.hugging.face.could.not.fetch")) }
|
||||
val modelCardContent = fetchOrRetrieveModelCard(entityDataApiContent, entityId, entityKind)
|
||||
val project = myElement.project
|
||||
val project = readAction { myElement.project }
|
||||
|
||||
HuggingFaceCardsUsageCollector.CARD_SHOWN_ON_HOVER.log(entityId, entityKind)
|
||||
val htmlContent = HuggingFaceHtmlBuilder(
|
||||
project,
|
||||
entityDataApiContent,
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.python.community.impl.huggingFace.service
|
||||
|
||||
import com.intellij.internal.statistic.eventLog.EventLogGroup
|
||||
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
|
||||
import com.intellij.internal.statistic.eventLog.events.EventFields
|
||||
import com.intellij.python.community.impl.huggingFace.HuggingFaceEntityKind
|
||||
|
||||
object HuggingFaceCardsUsageCollector: CounterUsagesCollector() { // PY-70535
|
||||
private val GROUP = EventLogGroup("python.hugging.face.cards", 1)
|
||||
|
||||
private val eventEntityKind = EventFields.Enum<HuggingFaceEntityKind>("entity_kind")
|
||||
|
||||
val CARD_SHOWN_ON_HOVER = GROUP.registerEvent(
|
||||
"card.shown.on.hover",
|
||||
EventFields.StringValidatedByInlineRegexp("entity-name", """[a-zA-Z0-9\.]+/[a-zA-Z0-9\.]+"""),
|
||||
eventEntityKind
|
||||
)
|
||||
|
||||
val NAVIGATION_LINK_IN_EDITOR_CLICKED = GROUP.registerEvent(
|
||||
"navigation.link.clicked",
|
||||
EventFields.StringValidatedByInlineRegexp("entity-name", """[a-zA-Z0-9\.]+/[a-zA-Z0-9\.]+"""),
|
||||
eventEntityKind
|
||||
)
|
||||
|
||||
// todo:
|
||||
//card shown in Documentation toolwindow + card type (model, dataset)
|
||||
// link clicked in the card + card type (model, dataset) + link type (signature 'powered by Hugging Face' or
|
||||
// card name or any link in the description)
|
||||
|
||||
override fun getGroup(): EventLogGroup = GROUP
|
||||
}
|
||||
Reference in New Issue
Block a user